在上一章的SQLiteDatebase来操作数据库好用吗?不同的人有不同的答案,接下来你将接触一个开源库LitePal,它采用了对象关系映射的(ORM)的模式,并将我们平常用到的数据库功能进行封装,使用一行sql语句就可以完成各种建表和增删改查的操作。

一、配置LitePal

1、要想使用开源库LitePal就添加依赖库,在配置文件中添加如下的:

implementation 'org.litepal.android:core:1.4.1'

2、上面步骤就将LitePal成功引入项目中来了,接下来就是配置litepal.xml文件,右击app/src/main目录-->new-->Directory,创建一个assets目录,然后在assets目录下面再创建一个litepal.xml文件

<?xml version="1.0" encoding="utf-8" ?>
<litepal><dbname value="bookStoress"></dbname>   //数据库名<version value="2"></version>           //数据库的版本号<list><mapping class="com.example.asus.summary3.Pictrue"></mapping> //用map对应映射模式(这里需要写类,让继承DataSupport,这里一定是完整的类名,<mapping class="com.example.asus.summary3.User"></mapping></list>
</litepal>

3、还需要配置一下AndroidManifest.xml文件

在Application下面添加

android:name="org.litepal.LitePalApplication"

4、写类,继承DataSupport

5、创建数据库,调用  LitePal.getDatabase()方法就创建了数据库

6、在升级数据库,以及需要修改表结构时,就没必要像SQLiteDatabase那样麻烦避免数据丢失。

LitePal就不存在这样的问题,要升级数据库只需要将版本号加1,要添加一张表,只需要在litepal.xml文件中的<list>...</list>

中添加对应的map映射就可以了

7、添加数据

很简单,只需要创建对应类的实例,调用一下save()方法就保存了

例如:

Point p=new Point(2,10);

p.save() ;

8、更新数据

对于LitePal而言,对象是否已经存储可以调用model.isSave()方法的结果来判断,返回true就表示已经存储,返回false就表示为】未存储,

例如:

Book book=new Book("高数",20,"西华大学");
book.save();  //对book第一次存储
book.setPrice(30);  //修改书的价格
book.save();   //重新保存

例如:

Book book=new Book();
book.setPrice(30);
book.setName("英语");//将name="高数" author="李" 的书的价格改为30,name改为英语
book.updateAll("name=? and author=?","高数","李");

8、删除数据,简单

例如:

DataSupport.deleteAll(Book.class,"price>?","15"); //将数据库中的全部数据中,书价格大于15的全部删除掉

9、查询

LitePal查询返回的是一个List<Object>的集合

例如:

List<Book> books=DataSupport.findAll(Book.class);  //查询全部的数据

Book book=DateSupport.findFirst(Book.class)://查询第一个记录

Book book=DataSupport.findLast(Book.class)  //查询最后一条记录

除此之外,还可以通过连缀的方式查询更多查询方式

select()方法查询哪几列:

List<Book> books=DataSupport.select("name","price").find(Book.class);

where()指定查询的约束条件:

List<Book> books=DtaSupport.where("price>?","30").find(Book.class);

order()方法指定结果的排序,

List<Book> books=DataSupport.order("price desc").find(Book.class);

其中desc表式降序,asc表示升序

limit()方法指定偏移数量,比如只看表中的前3条数据,

List<Book> books=DataSupport.limit(3).find(Book.class);

offset()方法指定查询结果的偏移量

List<Book> books=DtaSupport.limit(3).offset(1).find(Book.class);

几个方法中和:

List<Book> books=DataSupport.select("name","price","page")

.where("page>?","40")

.order("page desc")

.limit(10)

.offset(10)

.find(Book.class);

查询Book表中的第10条到20条的页数大于20页的条件的name,price,page这三项数据,按page降序

最后还可以,用原生的SQL语句

例:Cursor c=DataSupport.findSQL("select * from Book ");

实例:

1、litepal_activity.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><android.support.v4.view.ViewPagerandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_gravity="center"android:id="@+id/pager"><android.support.v4.view.PagerTabStripandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:gravity="top"android:id="@+id/pager_title"></android.support.v4.view.PagerTabStrip></android.support.v4.view.ViewPager></LinearLayout>

2、litepal_fragment1.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:background="@drawable/b1"android:orientation="vertical"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:orientation="vertical"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/pictrue_messge"android:hint="pictrue"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/add_pictrue"android:layout_gravity="center"android:text="添加图"/></LinearLayout><LinearLayoutandroid:layout_width="match_parent"android:layout_height="wrap_content"android:layout_margin="20dp"android:id="@+id/litepal_f1"android:orientation="vertical"><EditTextandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/user_messge"android:hint="user"/><Buttonandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/add_user"android:layout_gravity="center"android:text="添加用户"/></LinearLayout></LinearLayout>

3、litepal_fragment2.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/litepal_f2"android:orientation="vertical"><android.support.v7.widget.RecyclerViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/picture_recyclerview"></android.support.v7.widget.RecyclerView></LinearLayout>

4、litepal_fragment3.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/litepal_f3"android:orientation="vertical"><android.support.v7.widget.RecyclerViewandroid:layout_width="match_parent"android:layout_height="wrap_content"android:id="@+id/uer_recyclerview"></android.support.v7.widget.RecyclerView>
</LinearLayout>

5、pic_recyclerview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:layout_width="70dp"android:layout_height="70dp"android:layout_marginRight="10dp"android:id="@+id/pic_item_picid"/><TextViewandroid:layout_width="match_parent"android:layout_height="70dp"android:textSize="25sp"android:gravity="center_vertical"android:id="@+id/pic_item_name"/>
</LinearLayout>

6、user_recyclerview_item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="wrap_content"><ImageViewandroid:layout_width="70dp"android:layout_height="70dp"android:layout_marginRight="10dp"android:id="@+id/user_item_picid"/><TextViewandroid:layout_width="match_parent"android:layout_height="70dp"android:textSize="25sp"android:gravity="center_vertical"android:id="@+id/user_item_name"/>
</LinearLayout>

7、User.class

public class User extends DataSupport {private String name;private int u_picId;private int id;public User(String name, int u_picId, int id) {this.name = name;this.u_picId = u_picId;this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getU_picId() {return u_picId;}public void setU_picId(int u_picId) {this.u_picId = u_picId;}public int getId() {return id;}public void setId(int id) {this.id = id;}
}

8、Pictrue.class

public class Pictrue extends DataSupport{private int id;private int p_picId;private String name;public Pictrue(int id, int p_picId, String name) {this.id = id;this.p_picId = p_picId;this.name = name;}public int getId() {return id;}public void setId(int id) {this.id = id;}public int getP_picId() {return p_picId;}public void setP_picId(int p_picId) {this.p_picId = p_picId;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}

9、PictureRecyclerViewAdapter.class

public class PictureRecyclerViewAdapter extends RecyclerView.Adapter<PictureRecyclerViewAdapter.ViewHolder> {private List<Pictrue> pictrueList;public PictureRecyclerViewAdapter(List<Pictrue> pictrueList) {this.pictrueList = pictrueList;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view=LayoutInflater.from(parent.getContext()).inflate(R.layout.pic_recyclerview_item,parent,false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(final ViewHolder holder, final int position) {Pictrue pictrue=pictrueList.get(position);holder.pic_name.setText(pictrue.getName());holder.pic_image.setImageResource(pictrue.getP_picId());holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(holder.itemView.getContext(),pictrueList.get(position).getName(),Toast.LENGTH_SHORT).show();}});}@Overridepublic int getItemCount() {return pictrueList.size();}class ViewHolder extends RecyclerView.ViewHolder{ImageView pic_image;TextView pic_name;public ViewHolder(View itemView) {super(itemView);pic_image=itemView.findViewById(R.id.pic_item_picid);pic_name=itemView.findViewById(R.id.pic_item_name);}}}

10、UserRecyclerViewAdapter.class

public class UserRecyclerViewAdapter extends RecyclerView.Adapter<UserRecyclerViewAdapter.ViewHolder> {private List<User> userList;public UserRecyclerViewAdapter(List<User> userList) {this.userList = userList;}@Overridepublic ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {View view= LayoutInflater.from(parent.getContext()).inflate(R.layout.user_recyclerview_item,parent,false);return new ViewHolder(view);}@Overridepublic void onBindViewHolder(final ViewHolder holder, final int position) {User user=userList.get(position);holder.userName.setText(user.getName());holder.userImage.setImageResource(user.getU_picId());holder.itemView.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Toast.makeText(holder.itemView.getContext(),userList.get(position).getName(),Toast.LENGTH_SHORT).show();}});}@Overridepublic int getItemCount() {return userList.size();}class ViewHolder extends RecyclerView.ViewHolder{ImageView userImage;TextView userName;public ViewHolder(View itemView) {super(itemView);userImage=itemView.findViewById(R.id.user_item_picid);userName=itemView.findViewById(R.id.user_item_name);}}}

11、ListepalFragment1.class

public class ListepalFragment1 extends Fragment implements View.OnClickListener {Context context;EditText pic_messgae;EditText user_message;Button add_pic;Button add_user;int []pic_ids=new int[]{R.drawable.friend3,R.drawable.txxw,R.drawable.p8yx,R.drawable.part3_1,R.drawable.p6txkt};public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {View view=inflater.inflate(R.layout.litepal_fragment1,container,false);this.context=container.getContext();pic_messgae=view.findViewById(R.id.pictrue_messge);user_message=view.findViewById(R.id.user_messge);add_pic=view.findViewById(R.id.add_pictrue);add_user=view.findViewById(R.id.add_user);add_user.setOnClickListener(this);add_pic.setOnClickListener(this);return view;}@Overridepublic void onClick(View view) {switch (view.getId()){case R.id.add_pictrue:{String picName=pic_messgae.getText().toString();int i=(int)(Math.random()*pic_ids.length);Pictrue pictrue=new Pictrue(0,pic_ids[i],picName);pictrue.save();pic_messgae.setText("");LitepalFragment2 fragment2=((LitePalActivity)context).f2;fragment2.init();fragment2.adapter.notifyDataSetChanged();break;}case R.id.add_user:{String name=user_message.getText().toString();int i=(int)(Math.random()*pic_ids.length);User user=new User(name,pic_ids[i],0);user.save();user_message.setText("");LitepalFragment3 fragment3=((LitePalActivity)context).f3;fragment3.init();fragment3.adapter.notifyDataSetChanged();break;}}}
}

12、LitepalFragment2.class

public class LitepalFragment2 extends Fragment {List<Pictrue> pictrueList;RecyclerView recyclerView;PictureRecyclerViewAdapter adapter;public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {View view=inflater.inflate(R.layout.litepal_fragment2,container,false);init();recyclerView=view.findViewById(R.id.picture_recyclerview);LinearLayoutManager layoutManager=new LinearLayoutManager(getContext());recyclerView.setLayoutManager(layoutManager);adapter=new PictureRecyclerViewAdapter(pictrueList);recyclerView.setAdapter(adapter);return view;}public void init(){pictrueList= DataSupport.findAll(Pictrue.class);}
}

13、LitepalFragment3.class

public class LitepalFragment3 extends Fragment {List<User> userList;RecyclerView recyclerView;UserRecyclerViewAdapter adapter;public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle bundle) {View view=inflater.inflate(R.layout.litepal_fragment3,container,false);init();recyclerView=view.findViewById(R.id.uer_recyclerview);LinearLayoutManager layoutManager=new LinearLayoutManager(getContext());recyclerView.setLayoutManager(layoutManager);adapter=new UserRecyclerViewAdapter(userList);recyclerView.setAdapter(adapter);return view;}public void init(){userList= DataSupport.findAll(User.class);}}

14、LitePalActivity.class

public class LitePalActivity extends FragmentActivity {private List<String> pagertitle=new ArrayList<String>();private List<Fragment> fragmentList=new ArrayList<Fragment>();ViewPager pager;PagerTabStrip pagerTabStrip;MyViewPagerAdapter adapter;ListepalFragment1 f1=new ListepalFragment1();LitepalFragment2 f2=new LitepalFragment2();LitepalFragment3 f3=new LitepalFragment3();protected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.litepal_activity);init();LitePal.getDatabase();pager=findViewById(R.id.pager);adapter=new MyViewPagerAdapter(getSupportFragmentManager(),pagertitle,fragmentList);pager.setAdapter(adapter);pagerTabStrip=findViewById(R.id.pager_title);}private void init(){pagertitle.add("录入");pagertitle.add("图片");pagertitle.add("用户");fragmentList.add(f1);fragmentList.add(f2);fragmentList.add(f3);for(int i=0;i<2;i++){new Pictrue(0+1,R.drawable.rj,"p"+i).save();new User("u"+i,R.drawable.txkt,0+1).save();}}}

15、配置LitePal

在assets文件下面的litepal.xml

<?xml version="1.0" encoding="utf-8" ?>
<litepal><dbname value="bookStoress"></dbname><version value="2"></version><list><mapping class="com.example.asus.summary3.Pictrue"></mapping><mapping class="com.example.asus.summary3.User"></mapping></list>
</litepal>

添加依赖库:

implementation 'org.litepal.android:core:1.4.1'

在配置文件:

android:name="org.litepal.LitePalApplication"

android的数据存储(3)(LitePal)相关推荐

  1. android SharedPreferences数据存储

    android  SharedPreferences数据存储 很多时候我们开发的软件需要向用户提供软件参数设置功能,例如我们常用的QQ,用户可以设置是否允许陌生人添加自己为好友.对于软件配置参数的保存 ...

  2. 005 Android之数据存储

    文章目录 Android文件系统 Android文件的访问权限 文件访问权限实例 数据存储方式 内部存储 内部存储实例 外部存储 Shared Preferences Shared Preferenc ...

  3. android 储存方案,Android本地数据存储方案(一)

    Android系列的博客主要是记录和总结自己在平时学习之中遇到的问题,方便日后用到时查看,同时也希望对读者有所帮助.不足之处,欢迎指正~ 在说到Android数据存储之前,先提一下数据持久化,所谓数据 ...

  4. Android的数据存储之一------SharedPreferences

    下面将介绍下Android的数据存储,Android提供了5种方式存储数据: 1.SharedPreferences存储数据; 2.文件存储数据: 3.SQLite数据库存储数据: 4.使用Conte ...

  5. android常用的存储方式,Android 常见数据存储方式

    Android 常见数据存储方式有以下三种:1.使用SharedPreferences存储数据:其本质就是一个xml文件,可以保存字符串.布尔值.基础数据.集合等数据.常用于存储较简单的参数设置. 2 ...

  6. Android之数据存储-刘志远-专题视频课程

    Android之数据存储-17742人已学习 课程介绍         本课程介绍了Android中几种数据存储方式,让大家对Android中的数据存储一个系统的认识 课程收益     本课程介绍了A ...

  7. android app数据存储,基于Android开发的APP数据存储研究

    谢原武+龙文 摘要: 作为一个完整的应用程序,数据存储操作是必不可少的.Android系统一共提供了四种数据存储方式分别为File文件存储.Shared Preferences存储.ContentPr ...

  8. Android常用数据存储之SharedPreferences存储和读取用法分享

    一:Android常用数据存储,一共有五种方式,分别是 1.SharedPreferences储存数据, 2.文件存储 3.SQLite数据存储 4.ContentProvider储存数据 5.网络存 ...

  9. Android的数据存储和IO - 自动朗读(TTS)

    Android的数据存储和IO - 自动朗读(TTS) 自动朗读又是Android提供的另一种另类的IO,蛮不错的哦,支持对指定文本内容进朗读,学习完这个内容我立马就让它朗读:wwj is a goo ...

  10. 【Android】数据存储,文件,数据库

    Android中数据存储 一.在内部存储读写文件 1.文件io读写 写文件 //写入数据 private fun saveFile() {//将文件写入内部存储空间时,只能在本应用的目录中写入,不能写 ...

最新文章

  1. 使用Jittor实现Conditional GAN
  2. 适合初学者的Python小游戏开发,不仅有趣还能巩固自己所学知识
  3. ASP.Net 使用css换肤(转)
  4. Lazarus安装使用
  5. [MySQL]经常无故崩溃amd.dll , boot1.exe病毒
  6. edger多组差异性分析_简单使用DESeq2/EdgeR做差异分析
  7. Android面试总结经
  8. 【每日SQL打卡】​​​​​​​​​​​​​​​DAY 12丨游戏玩法分析 V【难度困难】
  9. 非线性优化库liblbfgs初探
  10. CDOJ 29 飞镖(dart) 解题报告
  11. LeetCode:通过递归方法打印杨辉三角形
  12. C语言入门经典(第5版)
  13. Mysql指定编码导入导出数据
  14. 直接读取Excel文件数据
  15. 功率曲线k值_锂电池放电曲线全面解析
  16. 使用aiop实现事件等待模式
  17. 学习笔记之Vue基础学习(一)
  18. JS中数组(Array)、Json对象长度(length)获取方法
  19. 窗口分析函数_12_生成累计百分比排名
  20. SDWebImage使用详解

热门文章

  1. oracle列转行用逗号隔开,Oracle逗号分隔列转行实现方法
  2. 米聊之死 雷军的“猪”折了腿?
  3. CodeForces - 140C New Year Snowmen
  4. SAP 采购合同案例教程金额合同前台
  5. 学编程难吗?多久能入门?
  6. 一只青蛙一次可以跳上1级台阶,也可以跳上2级,也可以跳n级。求该青蛙跳上一个n级的台阶总共有多少种跳法(先后次序不同算不同的结果)
  7. 六、全局锁和表锁 :给表加个字段怎么有这么 多阻碍?
  8. 转载:16种鲜鱼的做法
  9. 如何将pdf中一些特定页提取存储在另一个pdf中
  10. 代码版刘畊宏本草纲目健身操【内附源码/demo】