配置相关文件

在使用之前要进行相关配置,首先要在app.build.gradle中引入LitePal的依赖(下面最后一行代码)

dependencies {implementation fileTree(dir: 'libs', include: ['*.jar'])implementation 'androidx.appcompat:appcompat:1.0.2'implementation 'androidx.constraintlayout:constraintlayout:1.1.3'testImplementation 'junit:junit:4.12'androidTestImplementation 'androidx.test.ext:junit:1.1.0'androidTestImplementation 'androidx.test.espresso:espresso-core:3.1.1'implementation 'org.litepal.guolindev:core:3.2.3'
}

然后在main下新建文件夹assets,并在其下创建litepal.xml

并在litepal.xml中写入以下信息,数据库名字为BookStore,list标签中放的是数据库中的数据表,这里有两张表,Book和Category

<?xml version="1.0" encoding="utf-8"?>
<litepal><!-- 数据库名字 --><dbname value="BookStore" /><!-- 数据库版本 --><version value="2" /><!--  数据库对象  --><list><mapping class="com.example.litepaltest.Book"></mapping><mapping class="com.example.litepaltest.Category"/></list></litepal>

再AndroidMainfest.xml中注册LitePal

以上就是LitePal的配置过程,配置好之后就可以正式开始创建数据库并对它进行CURD(增删查改)了

创建数据库

新建一个Book类,数据库中的一张Book表,让它继承于LitePalSupport(书中是DataSupport,已经被弃用,现在改用LitePalSupport),get和set方法创建快捷键(Alt+Insert)

public class Book extends LitePalSupport {private int id;private String author;private double price;private int pages;private String name;public int getId() {return id;}public String getAuthor() {return author;}public double getPrice() {return price;}public int getPages() {return pages;}public String getName() {return name;}public void setId(int id) {this.id = id;}public void setAuthor(String author) {this.author = author;}public void setPrice(double price) {this.price = price;}public void setPages(int pages) {this.pages = pages;}public void setName(String name) {this.name = name;}}

回到litepal.xml中,引入此数据表,上面代码已经给出,看下面截图。

在activity_main.xml中新建一个按钮,用于创建数据库。

<Buttonandroid:id="@+id/btn_create"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="创建数据库"/>

在MainActivity中设置此按钮的监听器,点击按钮的时候创建数据库和里面的数据表。,这里给出相关代码。调用Connector.getDatabase()即可创建,是不是很简单。

Button CreateDatabase=findViewById(R.id.btn_create);CreateDatabase.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Connector.getDatabase();Toast.makeText(MainActivity.this, "创建成功", Toast.LENGTH_SHORT).show();}});

创建成功之后可以使用adb shell进入设备,然后使用相关命令去查看数据库和数据表是否存在,存在就说明创建成功。但是到目前为止我们只有空表,也就是说表里面没有数据的。

添加数据

想要看到数据,就要往里面添加数据,这就涉及到CURD中的添加数据了,下面来看看怎么使用LitePal往数据库中添加数据。

同样我们先设置一个按钮,用来添加数据。

<Buttonandroid:id="@+id/btn_add"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="添加数据"/>

如果我们要在Book中添加一项press,就直接在里面添加就行,很简单

private String press;public String getPress() {return press;}public void setPress(String press) {this.press = press;}

如果要添加一张表呢,那就再新建一个类,比如Category类,在里面定义相关的表项。切记要去litepal.xml中引入这张表。当然数据库的版本也要更新了,原来是1,现在更新为2了。

看看到现在我们新建了哪些内容。

litepal存放数据库的信息,Book和Category存放两张数据表的内容

然后该监听按钮了,新建一个Book对象,调用set方法设置我们要添加的数据,最后调用save()方法保存即可,再到数据库中查看,发现可以看到Book表中有了一条数据。

Button AddData=findViewById(R.id.btn_add);AddData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Book book=new Book();book.setName("The Da Vinci Code");book.setAuthor("Dan Brown");book.setPages(454);book.setPrice(16.96);book.setPress("Unknown");book.save();Toast.makeText(MainActivity.this,"添加成功",Toast.LENGTH_SHORT).show();}});

更新数据

更新数据的方法有好几种,这里就只介绍最方便灵巧的一种。

同样要设置一个按钮。

<Buttonandroid:id="@+id/btn_update"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="更新数据"/>

然后监听按钮事件

Button UpdataData=findViewById(R.id.btn_update);UpdataData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {Book book=new Book();//设置要更新的内容以及更新以后的数据book.setPrice(14.95);book.setPress("Anchor");//设置更新条件,name是The Lost Symbol且author是Dan Brown的全部更新为以上设置book.updateAll("name=? and author=?","The Lost Symbol","Dan Brown");Toast.makeText(MainActivity.this,"更新成功",Toast.LENGTH_SHORT).show();}});

最后的updateAll里面的参数,是不是有点像SQL语句呢。点击按钮以后,会发现所有name是The Lost Symbol且author是Dan Brown的行的Price都变成了14.95、Press都变成了Anchor。

注意:再使用updateAll的时候,会涉及到一个默认值的情况,int的默认值为0,String的默认值是null,如果我们要设置某一项的内容为默认值,就不能再使用set()方法了,而应该使用setToDefault()方法。

错误的写法:

book.setId(0);

正确的写法:

book.setToDefalut("id")

update()方法没有指定数据的时候就默认对所有数据都进行修改。

删除数据

删除使用的是LitePal.deleteAll()方法(书中使用的是DataSupport.deleteAll()方法,此方法已被弃用),我们直接看代码。

设置按钮

<Buttonandroid:id="@+id/btn_delete"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="删除数据"/>

监听按钮

Button DeleteData=findViewById(R.id.btn_delete);DeleteData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {LitePal.deleteAll(Book.class,"price<?","15");//删除所有价格小于15的数据Toast.makeText(MainActivity.this,"删除成功",Toast.LENGTH_SHORT).show();}});

第一个参数用于指定我要操作的表Book,后面的参数是数据设置的条件,如果不设置则默认删除所有。

查询数据

使用LitePal.findAll()方法(书中使用的是DataSupport.findAll()方法,此方法已被弃用)

设置按钮

<Buttonandroid:id="@+id/btn_query"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="查询数据"/>

监听按钮,这是查询Book表中的所有数据

Button QueryData=findViewById(R.id.btn_query);QueryData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {List<Book> books = LitePal.findAll(Book.class);//查询的数据存放到List中for (Book book : books){//遍历List取出数据并打印Log.d("MainActivity", book.getName());Log.d("MainActivity", book.getAuthor());Log.d("MainActivity", Integer.toString(book.getPages()));Log.d("MainActivity", Double.toString(book.getPrice()));}Toast.makeText(MainActivity.this,"查询成功",Toast.LENGTH_SHORT).show();}});

查询第一条数据

List<Book> books =LitePal.findFirst(Book.class);

查询最后一条数据

List<Book> books =LitePal.findLast(Book.class);

还可以使用select进行查询

List<Book> books =LitePal.select("name","author","pages").where("pages>?","400").order("pages").limit(10).offset(10).find(Book.class);

limit(10)表示前10行,offset(10)表示偏移为10,也就是11-20行,order("pages")表示结果按照pages升序排列。

这段代码表示查询Book表中第11-20条满足页数大于400这个条件的name,author,pages这3列数据,并将查询结果按照页数升序排列。

当然,如果以上的API还不能满足查询需求,LitePal还支持原生的SQL查询,调用LitePal.findBySQL()方法。注意此方法返回的是一个Cursor对象,要用前面的方法取出数据。

Cursor cursor=LitePal.findBySQL("select * from Book where pages > ? and price < ?","400","20");

最后附上查询结果图

命令行查看

点击查询按钮得到的结果

以上就是使用LitePal操作数据库的全部过程。

Android开发之LitePal数据库的使用(参考于《Android 第一行代码》)相关推荐

  1. Android开发之HttpClient网络请求以Json方式提交Post请求代码

    public class PayHttpUtils {/*** @param url 请求的网址*/public static String GetSingleCabCollect(String ur ...

  2. Android开发之旅:组件生命周期(二)

    引言 应用程序组件有一个生命周期--一开始Android实例化他们响应意图,直到结束实例被销毁.在这期间,他们有时候处于激活状态,有时候处于非激活状态:对于活动,对用户有时候可见,有时候不可见.组件生 ...

  3. Android 开发之Windows环境下Android Studio安装和使用教程(图文详细步骤)

    鉴于谷歌最新推出的Android Studio备受开发者的推崇,所以也跟着体验一下. 一.介绍Android Studio  Android Studio 是一个Android开发环境,基于Intel ...

  4. Android开发之旅:android架构

    引言 通过前面两篇: Android 开发之旅:环境搭建及HelloWorld Android 开发之旅:HelloWorld项目的目录结构 我 们对android有了个大致的了解,知道如何搭建and ...

  5. Android 开发之旅:深入分析布局文件又是“Hello World!”

    引言 上篇可以说是一个分水岭,它标志着我们从Android应用程序理论进入实践,我们拿起手术刀对默认的"Hello World!"程序进行了3个手术,我们清楚了"Hell ...

  6. android studio输入框下划线,Android开发之TextView的下划线添加

    Android开发之TextView高级应用 Android开发之TextView高级应用 我们平时使用TextView往往让它作为一个显示文字的容器,但TextView的功能并不局限于此.以下就和大 ...

  7. Android开发之MVVM模式实践(六),2021字节跳动春招技术面试题

    以上是我们创建协程的实现方式,我们可以通过指定Dispatchers来决定协程到底在什么线程中工作,而其实Kotlin的协程核心库中也为我们提供封装好了的scope,例如MainScope,源码如下: ...

  8. 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(1)

    参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版,转载请注明出处! 注2:本文不赘述androi ...

  9. 用kotlin方式打开《第一行代码:Android》之开发酷欧天气(2)

    参考:<第一行代码:Android>第2版--郭霖 注1:本文为原创,例子可参考郭前辈著作:<第一行代码:Android>第2版 注2:本文不赘述android开发的基本理论, ...

最新文章

  1. wpf+xml实现的一个随机生成早晚餐的小demo
  2. (DT系列五)Linux kernel 是怎么将 devicetree中的内容生成plateform_device【转】
  3. Linux-Windows-Mac-RabbitMQ安装教程
  4. three.js几何体的旋转,缩放,平移
  5. centos6.5系统bash损坏之救援模式修复
  6. python 实现SOM: 函数更新
  7. silverlight:贝塞尔曲线
  8. 直接创建和使用struct函数
  9. 数字图像学笔记——6. 噪音生成(椒盐噪音、高斯噪音、泊松噪音)
  10. 新库上线 | CnOpenData制造业工商注册企业基础信息数据
  11. 重装系统服务器2012r2,SCCM2012R2网络部署重装系统
  12. 学 android需要什么基础,学习安卓开发需要什么基础?
  13. R语言 关联规则(二)
  14. 科技百咖 | 天威诚信:韶光与共,不负前路
  15. 【iPhone】iPhone仅仅备份图片且保存实况图片(live photo)的方案
  16. 杰理-手表-AC701-watch-马达振动一次
  17. 野火stm32开发板给定一个脉冲程序_STM32开发板哪个好,推荐一款高性价比stm32MP157开发板...
  18. 浅谈运营商线路-----TDM、SDH、MSTP,OTN
  19. 程序设计基础学习总结
  20. 交叉编译与静态链接问题

热门文章

  1. 解决binwalk提取需要权限问题,binwalk提取文件报错。
  2. python利用列表计算斐波那契数列前30项并输出_python 题目:斐波那契数列计算;题目:站队顺序输出;题目:合法括号组合的生成;题目:用户登录(三次机会)...
  3. 【应用随机过程】04. 马尔可夫链的平稳分布
  4. IDEA怎么查看现在的项目使用的JDK版本?
  5. HTTPS是怎么防止劫持的
  6. SCI、EI论文检索,引用格式
  7. Linux 版本 内核版本 发行版本
  8. matlab ar谱分析,AR模型功率谱估计的典型算法比较及MATLAB实现
  9. 测试温度时共模电压的考虑
  10. [Java 基础] 深入理解List的toArray()方法和toArray(T[] a)方法