Android持久化----LitePal
来源:互联网 发布:d盘格式化数据恢复 编辑:程序博客网 时间:2024/06/14 15:30
LitePal是android持久化的一个轻框架。它在保存sql语句操作方式的同时,实现了ORM。本文将简单讲述Android Studio下LitePal的使用。
分为以下几部分
(1)引入dependence
(2)添加配置文件
(3)修改Manifest中的application参数
(4)创建数据库
(5)创建表
(6)常用的增删改查
(7)数据库的更新
引入dependence
这是最基本的!网上很多帖子都说,除添加dependence外,还需要引用jar包!从实例来看,对于1.6.1版本,仅需要在gradle的dependence中添加引用即可,无需jar包。
compile 'org.litepal.android:core:1.6.1'
添加配置文件
这步比较关键。最初我也出错。
assets目录一定要创建在main目录下,而非res目录下(当然,如果熟悉gradle,可以指定配置路径。否则,老老实实在main下创建)。
而后在目录下,添加配置文件litepal.xml。
<?xml version="1.0" encoding="utf-8"?><litepal> <dbname value="mydb"/> <version value="1"/> <list> <mapping class="com.breakloop.litepaldemo.entity.Hero"/> </list></litepal>
dbname为数据库名称,version为版本号,list中的mapping为数据库表所对应的实体类。
切记,每个与表对应的实体类都要加入list当中,否则,无法创建表。
修改Manifest中的application参数
在Manifest的application中添加android:name属性,标记该application为litepal应用。
创建数据库
在合适的位置调用如下代码即可。
LitePal.getDatabase();
创建表
由于LitePal实现了ORM,我们需要两步完成表的创建。
(1)将实体类继承org.litepal.crud.DataSupport
(2)将实体类添加到litepal.xml的mapping list中
例如,
package com.breakloop.litepaldemo.entity;import org.litepal.crud.DataSupport;/** * Created by user on 2017/12/19. */public class Hero extends DataSupport { private int age; private String name; private String title; public String getTitle() { return title; } public int getAge() { return age; } public String getName() { return name; } public void setAge(int age) { this.age = age; } public void setName(String name) { this.name = name; } public void setTitle(String title) { this.title = title; }}
常用的增删改查
那么,如何插入一条记录呢?
仅仅需要创建一个对象,然后调用继承自DataSupport的save()方法即可。
Hero hero=new Hero(); hero.setAge(10); hero.setName("A"); hero.setTitle("son"); hero.save();
那么,查询呢?
有了save()方法,闭着眼睛也成想到select()的存在。
List<Hero> heroList = Hero.select("age","name","title").where("name=?","B").find(Hero.class);if(heroList.size()>0){ for (Hero item : heroList) { Log.i(TAG, "name = "+item.getName() +", age = "+item.getAge() +", title = "+item.getTitle()); }}else { Log.i(TAG, "Do Not find B");}
select中要提供对应的列名;
where指定查询条件匹配格式,和查询值;
find指定表所对应的实体类class。
当然,还有group,limit,order,offset等方法。
例如
List<Hero> heroList = Hero.select("age","name","title").where("age>?","10").order("name").limit(3).offset(1).find(Hero.class);
即,从Hero表中,查询age>10的所有记录,并从该结果集合的第2条记录(offset 1)开始,取出3条记录(limit 3),同时按照name排序。
接下来,看数据库的更新。很明显,使用DataSupport的updateXXX()方法。
Hero hero = new Hero();hero.setTitle("Leader");hero.updateAll(Hero.class,"age=? and name=?","10","A");
当然,在查询后,对查询结果进行修改,然后调用实体类的save()方法,也能达到更新的效果。例如,
heroList=Hero.select("age","name","title").where("name=?","B").find(Hero.class);if(heroList.size()>0){ for (Hero item : heroList) { Log.i(TAG, "Update B name to B1"); item.setName("B1"); if(item.save()){ Log.i(TAG, "Update B name to B1"); }else { Log.i(TAG, "Update B name to B1 failed"); } }}else { Log.i(TAG, "Do Not find B");}
最后,是删除!铁定deleteXXX方法。例如
count=Hero.deleteAll(Hero.class,"name=?","A1");if(count==1){ Log.i(TAG, "delete A1");}else{ Log.i(TAG, "delete A1 failed");}
deleteAll跟updateAll方法一样,都会返回受该次操作影响的记录数量。
总体来看,LitePal的数据库操作核心类为DataSupport!而DataSupport所提供的方法(多达75个,其中2个弃用),远不止文中所述的几个。
例如将某列更新为默认值。
Hero hero = new Hero();hero.setToDefault("age");hero.UpdateAll();
由于age为整型,其默认值为0,而updateAll无条件,所以,所有的hero记录的age列,均被更新为0。
除此之外,DataSupport还保留了sql接口方法,供开发人员直接使用。
public static synchronized Cursor findBySQL(String... sql)
数据库结构的更新
对于数据库的更新,跟SqliteOpenHelper类似。
(1)将litepal.xml中的version值变大
(2)更新表所对应的实体类
原有数据,不会因为实体类的更新而丢失。当然,除非你删除了某一属性(列)。
至此,LitePal的简单小结完成。
其实LitaPal在github中的quick start已经很全面了。如有纰漏,可以直接参考原文。
https://github.com/LitePalFramework/LitePal
- Android持久化----LitePal
- Android 数据持久化(一)之LitePal
- Android数据库-开源LitePal
- Android stadio litepal
- Android LitePal实战应用
- litepal---Android数据库框架
- Android框架LitePal
- LitePal---Android数据库框架
- Android数据库LitePal
- Android数据库--LitePal
- Android Litepal数据库操作
- Android数据库LitePal
- Android 数据--LitePal
- android litepal数据查询
- Android litepal配置
- Android 数据持久化
- Android 数据持久化
- android cookie持久化
- 6轴IMU+磁力计,9轴传感器讲解
- 当json的键为变量而不是字符串时
- mui 封装的Ajax
- LaTeX 中的特殊符号
- Android 多线程断点下载 Okhttp+AsyncTask 封装下载任务
- Android持久化----LitePal
- 双目视觉计算距离
- Mysql数据库insert报慢查询
- 利用session_set_save_handler()函数将session保存到MySQL数据库中
- windows10 激活工具
- Nginx 做代理服务器时浏览器加载大文件失败 ERR_CONTENT_LENGTH_MISMATCH 的解决方案
- Error:Could not resolve all dependencies for configuration ':app:prodDebugCompileClasspath'. Cannot
- 根据ebayno爬取可见信息 本地+数据库
- 深度学习word embedding