LitePal数据存储
LitePal数据存储
- 配置LitePal
- 创建数据库
- 添加数据
- 查询数据
- 更新数据
- 删除数据
- 博客推荐
安卓之所以如此的受欢迎,不仅在于面向用户的一系列产品,面向我们开发者同样也非常友好。
GitHub上拥有成百上千的优秀Android开源项目,这使得很多时候我们开发时不用自己去编写那些冗长的代码,处理那些复杂的逻辑。调用一下几分钟就搞定,甚至比复制粘贴还容易。
那么我们一起来看一下这个开源库——LitePal。
配置LitePal
首先在app/build.gradle文件的dependencies闭包中添加如下代码,并Sync Now:
implementation 'org.litepal.android:java:3.0.0'
其中3.0.0是版本号,是目前最新的版本。
然后我们切换至Project文件管理模式,在app的src文件夹下的main文件夹处新建一个名为assets的Directory(选择Directory类型),然后在assets文件夹下新建一个litepal.xml文件(选择File类型,文件名为litepal.xml,后缀.xml也要打在文件名中),建好后添加如下代码:
<?xml version="1.0" encoding="utf-8"?>
<litepal><dbname value="BookStore"> </dbname><version value="1"> </version><list></list>
</litepal>
dbname标签用于指定数据库名,version标签用于指定数据库版本号,list标签则用于指定所有的映射模型。
最后,我们再修改一下AndroidManifest.xml中的代码,在<application下添加如下代码:
<applicationandroid:name="org.litepal.LitePalApplication" //添加这一行代码
创建数据库
定义一个Book类,代码如下:
(自动生成get和set:定义好变量后按Alt+Insert,然后在弹出的框内选中Getter and Setter,按下shift或ctrl键选中全部,最后点击ok)
public class Book {private int id;private String author;private double price=0;private int pages=0;private String name;public int getId() {return id;}public void setId(int id) {this.id = id;}public String getAuthor() {return author;}public void setAuthor(String author) {this.author = author;}public double getPrice() {return price;}public void setPrice(double price) {this.price = price;}public int getPages() {return pages;}public void setPages(int pages) {this.pages = pages;}public String getName() {return name;}public void setName(String name) {this.name = name;}
}
接下来我们将Book类添加到映射模型当中,在litepal.xml的list标签中加入代码:
<list><mapping class="com.example.mylitepaltest.Book"></mapping>//添加这一句</list>
我们通过<mapping标签声明我们要配置的映射模型类。
最后,在MainActivity下添加如下代码就完成了建表,也就是创建数据库的过程:
LitePal.getDatabase();
添加数据
完成建表之后就要向表中添加数据。
修改Book类,使其继承LitePalSupport:
public class Book extends LitePalSupport
然后设置一个Button按钮用来添加数据:
<Buttonandroid:id="@+id/add_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="add"></Button>
在主函数中给按钮注册点击监听事件,并给待添加的数据进行赋值:
Button addData=findViewById(R.id.add_data);
addData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Book book=new Book();book.setName("高等数学");book.setAuthor("同济大学");book.setPages(337);book.setPrice(39.00);book.save();Book book2=new Book();book2.setName("线性代数");book2.setAuthor("同济大学");book2.setPages(236);book2.setPrice(16.80);book2.save();}
});
查询数据
LitePal中的简单查询用法如下:
Object object = LitePal.findFirst(Object.class);
//查询表中第一条数据
Object object = LitePal.findLast(Object.class);
//查询表中最后一条数据
Object object = LitePal.find(Object.class,i);
//查询表中第i条数据
List<Object> objects = LitePal.findAll(Object.class, a, b, c, d);
//查询表中a,b,c,d条数据
LitePal中的连缀查询用法如下:
// 查询满足某条件的每条数据
List<Object> objects = LitePal.where("条件", "值").find(Object.class);
//查询满足某条件的对应数据的某些列
List<Object> objects = LitePal.select("列1", "列2").where("条件", "值").find(Object.class);
比如,在我们的BookStore表里,如果我们想查询表中第一条数据,我们可以先设置一个按钮,和一些显示数据的文本,并在主函数中编写如下代码:
<Buttonandroid:id="@+id/simpleQuery_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="simpleQuery"></Button><Buttonandroid:id="@+id/adornmentQuery_data"android:layout_width="match_parent"android:layout_height="wrap_content"android:text="adornmentQuery"></Button><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/name"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/author"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/price"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:id="@+id/pages"/>
Button simpleQuery=findViewById(R.id.simpleQuery_data);simpleQuery.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Book book= LitePal.find(Book.class,1);display(book);}});
如果我们想查询表中页码大于250页的书的信息,我们可在主函数中编写如下代码:
Button adornmentQuery=findViewById(R.id.adornmentQuery_data);adornmentQuery.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Book book = LitePal.select("name","price").where("pages > ?","250").findFirst(Book.class);display(book);}});
在主函数中编写一个display方法,用来展示书本信息:
public void display(Book book){name.setText(book.getName());author.setText(book.getAuthor());price.setText(""+book.getPrice());pages.setText(""+book.getPages());}
更新数据
如果我们想指定所有"name"为"高等数学"并且"author"为"同济大学"的书书价更新为1,我们可以先通过set方法来更新我们想要修改的数据,然后通过updateAll()方法执行更新操作。
Button updateData=findViewById(R.id.update_data);updateData.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {Book book=new Book();book.setPrice(1);book.updateAll("name=? and author=?","高等数学","同济大学");Book book1 = LitePal.where("name = ? and author=?","高等数学","同济大学").findFirst(Book.class);display(book1);}});
删除数据
在LitePal中删除数据使用delete函数,用法如下
//删除表中第i条数据
LitePal.delete(Object.class, i);
需要注意的是,这不仅仅会将表中id为2的记录删除,同时还会将其它表中以这条记录作为外键的数据一起删除掉,因为外键既然不存在了,那么这么数据也就没有保留的意义了。(外键是指这条记录在另一张表中是参考的基础,在大家学完数据库这门课程之后会有更多了解)
博客推荐
关于数据存储,书上介绍了不止一种方法,并且更加详细,每种方法都有其优缺,大家可以学习和体会。
这里推荐一下郭霖大神的博客
Android数据库高手秘籍(零)——前言
http://blog.csdn.net/guolin_blog/article/details/38083103
Android数据库高手秘籍(一)——SQLite命令
http://blog.csdn.net/guolin_blog/article/details/38461239
Android数据库高手秘籍(二)——创建表和LitePal的基本用法
http://blog.csdn.net/guolin_blog/article/details/38556989
Android数据库高手秘籍(三)——使用LitePal升级表
http://blog.csdn.net/guolin_blog/article/details/39151617
Android数据库高手秘籍(四)——使用LitePal建立表关联
http://blog.csdn.net/guolin_blog/article/details/39207945
Android数据库高手秘籍(五)——LitePal的存储操作
http://blog.csdn.net/guolin_blog/article/details/39345833
Android数据库高手秘籍(六)——LitePal的修改和删除操作
http://blog.csdn.net/guolin_blog/article/details/40083685
Android数据库高手秘籍(七)——体验LitePal的查询艺术
http://blog.csdn.net/guolin_blog/article/details/40153833
Android数据库高手秘籍(八)——使用LitePal的聚合函数
http://blog.csdn.net/guolin_blog/article/details/40614197
下面是迭代的版本:
2016-03-03 郭霖
LitePal 1.3.1发布了,从此支持图片存储!
http://mp.weixin.qq.com/s/7tDifDvOHr7YI7zCS9fpmQ
2016-11-15 郭霖
你们要的多数据库功能终于来了
http://mp.weixin.qq.com/s/C7nbJXOS9lYPgOda-8Pw0A
2017-03-07 郭霖
LitePal 1.5.0版本发布,你想要的都在这里
http://mp.weixin.qq.com/s/GXPkrkiHk4MWNnpCLzTf_Q
2017-08-15
LitePal 1.6.0版本来袭,数据加解密功能保障你的应用数据安全
https://mp.weixin.qq.com/s/TSp36cnKLxUmAHjT86UCrQ
2018-06-11
Android数据库高手秘籍(九),赶快使用LitePal 2.0版本吧
https://blog.csdn.net/guolin_blog/article/details/80586028
LitePal数据存储相关推荐
- Android数据库LitePal的存储操作
本文属于转载,在此声明,出处:http://blog.csdn.net/guolin_blog/article/details/38556989 并且感谢guolin分享了这么精彩的博文.以下正文: ...
- android 存储方式简书,Android的多种数据存储方式
1. 简介 作为一个完整的应用程序,数据存储操作是必不可少的.现在Android的离线缓存就是通过网络良好状态时将从服务器收到的数据保存到本地.Android系统中主要提供了3种方式进行数据存储,分别 ...
- Android五大数据存储
前言 数据存储可谓是Android中灰常灰常重要的一部分了.任何一个应用离不开数据的存储,有时需内存存储,有时需本地存储,还有时需要两个进程间传输数据,等等.那接下来介绍的五大存储中将包括了所有的应用 ...
- 第006天:APP的数据存储技术
任何一个应用程序,其实说白了就是在不停地和数据打交道,我们聊QQ.看新闻.刷微博, 所关心的都是里面的数据,没有数据的应用程序就变成了一个空壳子,对用户来说没有任何实际 用途.那么这些数据都是从哪来的 ...
- 《第一行代码》Android学习笔记(6)数据存储
目录 1. Why 2. 文件存储:简单文本或二进制数据 2.1 将数据存储到文件中 2.2 从文件中读取数据 3. SharedPreferences 存储 3.1数据存取: 3.2 记住密码功能 ...
- Android学习羁绊之数据存储
数据持久化就是指将那些内存中的瞬时数据保存到存储设备中,保证即使在手机或电脑关机的情况下,这些数据仍然不会丢失.保存在内存中的数据是处于瞬时状态的,而保存在存储设备中的数据是处于持久状态的,持久化技术 ...
- 英特尔 QLC 3D NAND 数据存储
英特尔 QLC 3D NAND 数据存储 NAND是什么 由于SSD固态硬盘的普及,NAND这个词逐渐进入用户们的视线.许多厂商都在产品宣传中提到3D NAND颗粒等词汇,对于普通用户来讲,完全不知道 ...
- Android的数据存储方式
1.Shared Preferences 2.文件存储数据 3.数据库 4.Content Provider存储数据,是所有应用程序之间数据存储和检索的一个桥梁,它的作用就是使得各个应用程序之间实现数 ...
- mysql更改数据库数据存储目录_MySQL更改数据库数据存储目录
MySQL数据库默认的数据库文件位于/var/lib/mysql下,有时候由于存储规划等原因,需要更改MySQL数据库的数据存储目录.下文总结整理了实践过程的操作步骤. 1:确认MySQL数据库存储目 ...
- AS3.0编程 So本地数据存储(“超级cookies”)--AS3:Local SharedObject
Flash影片运行过程中,大多数的数据都存储于影片本身,一旦影片被关闭,这些数据也就从内存中被清除掉,下次运行时,数据将从头开始.若想存储数据或者让客户端的多个影片共享同一组数据,就要想办法把数据存储 ...
最新文章
- 张一鸣宣布卸任字节CEO!网友:完不成OKR被优化了!
- MariaDB/MySQL备份和恢复(三):xtrabackup用法和原理详述
- 最强的浏览器插件——油猴脚本
- C 语言 链表的创建与打印
- Ghost in IE6.web标准网页IE6中的幽灵。
- python中添加路径_python中添加模块导入路径的方法
- 高中计算机会考vb教程,高中信息技术VB会考上机程序题汇总
- JavaScript的类的实现
- 深入了解如何学好C++编程
- 计算机教育部 学科分类,教育部学科分类与代码分类查询
- linux主引导修复工具,Boot-Repair/引导修复工具
- Kafka安装包下载地址
- 内存颗粒位宽和容量_DDR4内存终极解析(一)--DDR4内存颗粒
- android studio 中要在app名称中添加特殊符号
- arima 公式_R时间序列分析(8)ARIMA(上)
- 传奇3国际版 单机假设.说明和下载地址
- 超级计算机紫金,紫金山天文台将用“天河一号”模拟宇宙成长
- 【记一次kafka报org.apache.kafka.clients.consumer.CommitFailedException异常处理】
- 手机RSS资源地,各大网站RSS源地址订阅
- 绝对干货!淘宝运营在平台补单的十大靠谱技巧_店铺