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

来源:互联网 发布:网页小游戏源码 编辑:程序博客网 时间:2024/06/05 06:15

安卓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 {

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

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

创建表

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

public class Student extends DataSupport {// 继承自DataSupportprivate int age;private float height;@Column(unique = true, defaultValue = "unKnow")// 唯一和默认值为unKnowprivate 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);

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

3 0
原创粉丝点击