目前最新版本是 3.2.3。
GitHub:LitePal

基本用法

1. 在 build.gradle 添加依赖:

    // 数据库implementation 'org.litepal.guolindev:core:3.2.3'

2. 在 assets 配置 litepal.xml

<?xml version="1.0" encoding="utf-8"?>
<litepal><dbname value="lottery" ></dbname><version value="1" ></version><list><mapping class="com.hk.hktlottery.db.Prize"></mapping></list>
</litepal>

3. 配置 LitePalApplication

/*** Created on 2021/6/22 14:16** @author Gong Youqiang*/
public class MyApp extends LitePalApplication {private static Application mApplication;@Overridepublic void onCreate() {super.onCreate();mApplication = this;LitePal.initialize(this);//获取到SQLiteDatabase的实例,创建数据库表SQLiteDatabase db = LitePal.getDatabase();}public static Context getAppContext() {return mApplication;}}

开始建表

1. Prize.java

/*** Created on 2021/7/12 10:21** @author Gong Youqiang*/
public class Prize extends LitePalSupport {@Column(unique = true)private int id;@Column(nullable = false)private String level;@Column(nullable = false)private String name;@Column(nullable = false)private int num;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getLevel() {return level;}public void setLevel(String level) {this.level = level;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getNum() {return num;}public void setNum(int num) {this.num = num;}
}

升级表

1. Comment.java

public class Comment extends LitePalSupport {private int id;private String content;// 自动生成get、set方法 ...
}

2. 修改 litepal.xml 中的配置,在映射列表中新增 Comment 类,并将版本号加 1

<?xml version="1.0" encoding="utf-8"?>
<litepal><dbname value="lottery" ></dbname><version value="2" ></version><list><mapping class="com.hk.hktlottery.db.Prize"></mapping><mapping class="com.hk.hktlottery.db.Comment"></mapping></list>
</litepal>

增删改查

1. 增

Prize prize = new Prize();
prize.setId(list.size());
prize.setLevel("一等奖");
prize.setName("奖励 100 元");
prize.setNum(1);
prize.save();    //这一句代码就是将一条记录存储进数据库中

2. 删

// 删除单个记录,id=1
LitePal.delete(Prize.class,1);//删除数据库中Prize表的所有记录
LitePal.deleteAll(Prize.class); //删除数据库Prize表中duration大于3500的记录
LitePal.deleteAll(Prize.class, "duration > ?" , "3500");

3. 改
方法一:

//第一步,查找id为1的记录
Movie movie = LitePal.find(Movie.class, 1);
//第二步,改变某个字段的值
movie.setPrice(4020f);
//第三步,保存数据
movie.save();

方法二:

Movie movie=new Movie();
movie.setName("2Diots");
movie.setDirector("某人");//直接更新id为1的记录 movie.update(1);

方法三:

Movie movie=new Movie();
movie.setDirector("someone");
//更新所有name为2Diots的记录,将director字段设为someone
movie.updateAll("name = ?", "2Diots");Movie movie=new Movie();
movie.setName("someone");
movie.setDirector("someone");
//将更新所有name为2Diots,director为gpf的记录name和director均改为someone
movie.updateAll("name=? and director=?", "2Diots","gpf");

4. 查

   //查找movie表的所有记录,返回值是一个泛型为Movie的List集合
List<Movie> allMovies = LitePal.findAll(Movie.class); //查找movie表id为1的记录
Movie movie = LitePal.find(Movie.class,1); // 比如获取news表中的第一条数据
News firstNews = LitePal.findFirst(News.class);// 获取News表中的最后一条数据
News lastNews = LitePal.findLast(News.class);// 想把news表中id为1、3、5、7的数据都查出来
List<News> newsList = LitePal.findAll(News.class, 1, 3, 5, 7);
// 或者
long[] ids = new long[] { 1, 3, 5, 7 };
List<News> newsList = LitePal.findAll(News.class, ids);//查找name为2Diots的记录,并且以时长作排序,where()方法接收任意个字符串参数,其中第一个参数用于进行条件约束,
//从第二个参数开始,都是用于替换第一个参数中的占位符的。那这个where()方法就对应了一条SQL语句中的where部分。
List<Movie> movies = LitePal.where("name = ?", "2Diots").order("duration").find(Movie.class);
// 但是这样会将news表中所有的列都查询出来,也许你并不需要那么多的数据,而是只要title和content这两列数据。那么也很简单,我们只要再增加一个连缀就行了,如下所示:
List<News> newsList = LitePal.select("title", "content").where("commentcount > ?", "0").find(News.class);
//将查询出的新闻按照发布的时间倒序排列,即最新发布的新闻放在最前面,那就可以这样写:
List<News> newsList = LitePal.select("title", "content").where("commentcount > ?", "0").order("publishdate desc").find(News.class);
//order()方法中接收一个字符串参数,用于指定查询出的结果按照哪一列进行排序,asc表示正序排序,desc表示倒序排序,因此order()方法对应了一条SQL语句中的order by部分。
//也许你并不希望将所有条件匹配的结果一次性全部查询出来,因为这样数据量可能会有点太大了,而是希望只查询出前10条数据,那么使用连缀同样可以轻松解决这个问题,代码如下所示:
List<News> newsList = LitePal.select("title", "content").where("commentcount > ?", "0").order("publishdate desc").limit(10).find(News.class);
//limit()方法接收一个整型参数,用于指定查询前几条数据,这里指定成10,意思就是查询所有匹配结果中的前10条数据。
//刚才我们查询到的是所有匹配条件的前10条新闻,那么现在我想对新闻进行分页展示,翻到第二页时,展示第11到第20条新闻,只需要再连缀一个偏移量就可以了,如下所示:
List<News> newsList = LitePal.select("title", "content").where("commentcount > ?", "0").order("publishdate desc").limit(10).offset(10).find(News.class);
//这里指定成10,就表示偏移十个位置,那么原来是查询前10条新闻的,偏移了十个位置之后,就变成了查询第11到第20条新闻了,如果偏移量是20,那就表示查询第21到第30条新闻//查找所有年龄小于25岁的人
List<Person> person = LitePal.where("age < ?", 25).find(Person.class);

推荐文献:
Android数据库高手秘籍

【Android -- 数据存储】LitePal 的基本使用相关推荐

  1. Android数据存储——2.文件存储_B_资源文件

    今天学习Android数据存储--文件存储_资源文件 把资源文件mybook.txt放入项目目录下的res资源文件夹下的raw文件夹下(没有则新建),PS:mybook.txt存为UTF-8编码. X ...

  2. Android数据存储——2.文件存储_C_DOM解析XML文档

    今天学习Android数据存储--文件存储_DOM解析XML文档 位于org.w3c.dom操作XML会比较简单,就是将XML看做是一颗树,DOM就是对这颗树的一个数据结构的描述,但对大型XML文件效 ...

  3. Android数据存储之GreenDao 3.0 详解

    前言: 今天一大早收到GreenDao 3.0 正式发布的消息,自从2014年接触GreenDao至今,项目中一直使用GreenDao框架处理数据库操作,本人使用数据库路线 Sqlite----> ...

  4. < Android数据存储> 任务二 应用程序数据文件夹里的文件读写

    :zh]Android中提供了两个方法用来打开应用程序的数据文件夹IO流. 1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法 ...

  5. 5 Android数据存储 任务二 应用程序数据文件夹里的文件读写 ,

    Android中提供了两个方法用来打开应用程序的数据文件夹IO流. 1.FileInputStream openFileInput(String name):参数name表示某个文件名,该方法用于打开 ...

  6. Android数据存储:Shared Preferences

    Android数据存储之SharedPreferences 在Android系统中提供了多种存储技术.通过这些存储技术可以将数据存储在各种存储介质上, Android 为数据存储提供了如下几种方式: ...

  7. android+默认存储,Android 数据存储之SP存储,内部存储,外部存储

    Android 数据存储之SP存储,内部存储,外部存储 Android提供了多种数据存储的技术来永久的保存应用数据,以便于开发者能够根据自己的需求来选择合适的数据存储方案,主要有SharedPrefe ...

  8. Android数据存储安全实践

    0x00 数据安全 Android操作系统自问世以来凭借其开放性和易用性成为当前智能手机的主流操作系统之一,作为与人们关系最密切的智能设备,越来越多的通讯录.短信.视频等隐私数据以明文的方式保存在手机 ...

  9. 【Android数据存储】ContentProvider详细介绍(附实例源码)

    1.ContentProvider是什么? ContentProvider--内容提供者.它是一个类,这个类主要是对Android系统中进行共享的数据进行包装,并提供了一组统一的访问接口供其他程序调用 ...

  10. Android数据存储和读取的三种方法

    Android数据存储和读取的三种方法 一.文件存储 二.Context存储 三.SharedPreferences存储 一.文件存储 1.利用文件进行数据的存储 public static bool ...

最新文章

  1. apache php 调优_记一次apache+php调优
  2. js经典校验之注册与登录校验
  3. [云炬创业基础笔记]第二章创业者测试9
  4. 浅谈域名发散与域名收敛
  5. ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能
  6. Redis实战(八):面试常问:击穿,穿透,雪崩,分布式锁,API(jedis,luttce,springboot:low/high level)
  7. 生成文件的另一种思路——共享文件同步
  8. 游戏软件性能测试怎么做?常规测试知识要点总结
  9. CSS样式切换技巧 - 动态更换网页色彩皮肤
  10. 大学心理学课本_2019年北京师范大学765真题分析
  11. 20张图深度详解MAC地址表、ARP表、路由表
  12. 汽车租赁系统V1.0
  13. 链家广州二手房的数据与分析——数据分析1
  14. 毕业论文概念界定要怎么写?
  15. html 心形字符,心形符号大全
  16. 户外风景拍摄自然风光摄影网站搭建模板
  17. 使用formality的技巧
  18. c语言数据类型的心得体会,C语言学习与感悟——《C语言学习基本框架》
  19. 深入理解JVM学习(b站 张龙视频 P1-P14)
  20. 电脑端上有哪些免费好用的思维导图软件?

热门文章

  1. 如何使用proteus仿真
  2. .net 6 简单使用redis
  3. python爬虫淘宝评论图片_Python爬虫实战四之抓取淘宝MM照片
  4. Glide4.0 centerCrop属性和圆角 冲突
  5. python解析nmea0183协议获取GPS定位信息
  6. 图像增强总结-Retinex算法
  7. 计算机windows8黑屏怎么办,Win8电脑开机黑屏只有鼠标光标怎么解决
  8. 值得收藏的微软Windows系统蓝屏代码大全以及修复方法
  9. 产品的国内版和国际版背后的思考
  10. native2ascii的使用