您的位置:首页 > 移动开发 > Android开发

写给初学者26_android_数据持久化_LitePal_更简单的数据库操作

2017-04-25 20:55 525 查看

安卓26_数据持久化-SQLite第三方开源库

实际上SQLiteDataBase当中提供的诸多方法是容易让人头大的,很多又经验的开发者会对其做一次封装,并且开源化。这确实会对开发带来不小的提速,但是还是建议充分理解最基本的东西以后再来接触第三方开源库。关于数据库的第三方开源库常见的有OrmLite、LitePal等。这里介绍LitePal

LitePal

如果你的英语能力不错,那么建议直接去LitePal的开源库地址上参看。地址:https://github.com/LitePalFramework/LitePal

这是一个非常好用的第三方数据库封装库,能够给前期数据库知识不扎实的开发者减轻不少的压力。

1.添加依赖

使用Studio做开发,这一点是几乎逃避不了的。如果是Eclipse那么下载jar包并且导入就好了。

dependencies {
compile 'org.litepal.android:core:1.5.1'
}


2.配置一个litepal.xml

首先需要assets文件夹下,新建一个litepal.xml文件,然后复制下面的代码进去。

<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--
定义应用程序的数据库名称。
默认情况下,每个数据库名称应以.db结尾。
如果您没有使用.db命名数据库,
LitePal会为您自动加上后缀。
-->
<dbname value="litePalDemo" />

<!--
定义数据库的版本。 每次你想要
要升级您的数据库,版本标签将有所帮助。
修改您在映射标记中定义的模型,只需修改
使版本值加一,升级数据库
将自动处理,不用担心。
-->
<version value="1" />

<!--
在列表中使用映射标签定义您的模型,LitePal将会
为每个映射类创建表。 支持的字段
模型中定义的将被映射成列。
-->
<list></list>

<!--
定义.db文件应该在哪里。 “internal”表示.db文件
将存储在数据库文件夹的内部存储器中
一个可以访问。 “external”表示.db文件将被存储在路径到主外部存储设备上的目录,
该应用程序可以放置它拥有哪些所有人的持久文件可以访问。 “内部”将作为默认值。
<storage value="external" />
-->

</litepal>


这里需要注意的是第一点,关于对AS不太熟悉的小伙伴,可能对Assets文件的创建有些迷惑。



另外创建xml文件的时候,会发现文件跑到了res文件下面去了。这里直接选择创建file就好了,不然AS会默认将你创建的文件放到res下面去。当然关于为什么需要这样,初学的同志们暂时不用知道,当你以后做一些混合开发的时候会了解到的。

这个xml文件的用处很明确

dbname配置项目的数据库名称。

版本配置数据库的版本。 每次你想升级数据库,加上这里的值。

列表配置映射类。

存储配置应存储数据库文件的位置。 内部和外部是唯一有效的选项。

3.清单文件添加内容

这我们进行很多操作的时候,都需要传递Context作为参数,这是很烦躁的一件事情,LitePal也帮我们解决掉了这个事情。只需要向像下面这么做。

<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>


添加一句话到application标签中,如果自己有Application了那么清单文件中肯定是注册的自己的,不过可以选择继承,或者不要忘记初始化。

public class MyOwnApplication extends AnotherApplication {

@Override
public void onCreate() {
super.onCreate();
// 初始化
LitePal.initialize(this);
}
...
}


上面都是一些基本的配置操作,做好了基本的配置操作后就可以开始去使用了。

创建表

1.直接一个java类,并且继承DataSupport

public class Student extends DataSupport {// 继承自DataSupport

private int age;
private float height;
@Column(unique = true, defaultValue = "unKnow")// 唯一和默认值为unKnow
private String name;
@Column(ignore = true)// 忽略
private String other;

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

public float getHeight() {
return height;
}

public void setHeight(float height) {
this.height = height;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getOther() {
return other;
}

public void setOther(String other) {
this.other = other;
}
}


将该类的完整类名添加到litePal.xml中的List标签中去。

<list>
<mapping class = 完整包名.Student"></mapping>
</list>


如果这个时候你再回想SQLiteDataBase,应该就会很舒服了,SQLiteDataBase繁琐的数据库语句,和参数列表居多的方法得到解决了。



我们没有添加id列,但是LitePal依旧为我们以id作为了主键,并且@Column(ignore = true)注解后,info并没有创建到表列中来。

更新表

如果你还记得SQLiteDataBase的更新表操作,那么真的而是太痛苦了,我们不但要更改Version来激活onUpgrade,还得注意表的相关操作。十分的不便。使用LitePal将会方便很多。

1.如果是新建表,创建一个新的类,更改一下数据库版本就好。

2.如果对原有表进行一个的修改,那么修改后,更改一下数据库版本就好。

<version value="修改" ></version>


简单粗暴

数据库基本操作-增加

Student student = new Student();
student.setAge(10);
// ....
student.save();


简单的异常,save方法来源于DataSupport。免去了繁琐的数据库语句、

数据库的基本操作-修改

最常用的方法

就像普通逻辑一样,删除,修改,都离不了查询的操作

Student studentToUpdate = DataSupport.find(Student.class, 1);
studentToUpdate.setAge(19); // 修改
studentToUpdate.save();// 保存


还提供了

findFirst

findLast

findAll

findBySQL

也可以

int id = 10;
Student studentToUpdate = new Student();
studentToUpdate.setAge(19); // 修改
studentToUpdate.update(id);// 更新到id为10


还可以

Student studentToUpdate = new Student();
studentToUpdate.setAge(19); // 修改
studentToUpdate.updateAll("name = ?","xxx");


数据库的基本操作-删除

DataSupport.delete(Student.class,10);// 删除id为10的

DataSupport.deleteAll(Student.clas,"age > ?",19);//删除年纪大于19的


数据库的基本操作-查询

主要是查询所有和模糊查询

List<Student> studentList = DataSupport.findAll(Student.class);// 有重载的方法,可以根据id来查询
// 条件查询 并且以名字排序
List<Student> studentList =
DataSupport.where("name like ?", "song%").order("age").find(Student.class);


基本操作就是这样,十分强大的一个三方库

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: