Android开发数据库之LitePal用法

本文详细介绍了Android数据库框架LitePal的使用方法,包括配置、建表、表关联建立、数据增删改查及聚合函数的使用。通过LitePal,开发者可以使用面向对象的方式来操作数据库,简化SQL语句,提高开发效率。文章首先展示了LitePal的配置步骤,如引入库、配置litepal.xml和LitePalApplication。接着,通过实例演示了如何创建和升级数据库表,以及如何使用LitePal处理一对一、多对一和多对多的表关联。此外,文章还详细阐述了LitePal的查询操作,包括简单查询、连缀查询、原生查询和聚合函数的使用,如count()、sum()、average()、max()和min()。通过LitePal,开发者可以更轻松地进行数据库操作,避免复杂的SQL编写。
摘要由CSDN通过智能技术生成

前几天看了郭神的Android开发数据库高手秘籍,完全被震撼到了,所以现在把郭神的数据库高手秘籍里面的关于LitePal全部截取出来,方便自己以后查看。

一、LitePal的基本用法

虽说LitePal宣称是近乎零配置,但也只是“近乎”而已,它还是需要进行一些简单配置才可以使用的,那么我们第一步就先快速学习一下LitePal的配置方法。

快速配置

1. 引入Jar包或源码

首先我们需要将LitePal的jar包引入到项目当中,可以点击这里查看LitePal的最新版本,选择你需要的下载即可。下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了,如下图所示:


如果你不想用jar包的话,也可以把LitePal的源码下载下来,然后作为一个library库导入到Eclipse当中,再让我们的项目去引用这个library库就可以了。

2. 配置litepal.xml

接着在项目的assets目录下面新建一个litepal.xml文件,并将以下代码拷贝进去:

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <litepal>  
  3.     <dbname value="demo" ></dbname>  
  4.   
  5.     <version value="1" ></version>  
  6.   
  7.     <list>  
  8.     </list>  
  9. </litepal>  
配置文件相当简单,<dbname>用于设定数据库的名字,<version>用于设定数据库的版本号,<list>用于设定所有的映射模型,我们稍后就会用到。

3. 配置LitePalApplication

由于操作数据库时需要用到Context,而我们显然不希望在每个接口中都去传一遍这个参数,那样操作数据库就显得太繁琐了。因此,LitePal使用了一个方法来简化掉Context这个参数,只需要在AndroidManifest.xml中配置一下LitePalApplication,所有的数据库操作就都不用再传Context了,如下所示:

[html]  view plain copy
  1. <manifest>  
  2.     <application  
  3.         android:name="org.litepal.LitePalApplication"  
  4.         ...  
  5.     >  
  6.     ...  
  7.     </application>  
  8. </manifest>  
当然,有些程序可能会有自己的Application,并在这里配置过了。比如说有一个MyApplication,如下所示:
[html]  view plain copy
  1. <manifest>  
  2.     <application  
  3.         android:name="com.example.MyApplication"  
  4.         ...  
  5.     >  
  6.     ...  
  7.     </application>  
  8. </manifest>  
没有关系,这时只需要修改一下MyApplication的继承结构,让它不要直接继承Application类,而是继承LitePalApplication类,就可以使用一切都能正常工作了,代码如下所示:
[java]  view plain copy
  1. public class MyApplication extends LitePalApplication {  
  2.     ...  
  3. }  

但是,有些程序可能会遇到一些更加极端的情况,比如说MyApplication需要继承另外一个AnotherApplication,并且这个AnotherApplication还是在jar包当中的,不能修改它的代码。这种情况应该算是比较少见了,但是如果你遇到了的话也不用急,仍然是有解释方案的。你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面,接着打开LitePalApplication类,将它的继承结构改成继承自AnotherApplication,再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了。

仅仅三步,我们就将所有的配置工作全部完成了,并且这是一件一本万利的事情,自此以后,你就可以开心地体验LitePal提供的各种便利了,就让我们从建表开始吧。

开始建表

前面在介绍的时候已经说了,LitePal采取的是对象关系映射(ORM)的模式,那么什么是对象关系映射呢?简单点说,我们使用的编程语言是面向对象语言,而我们使用的数据库则是关系型数据库,那么将面向对象的语言和面向关系的数据库之间建立一种映射关系,这就是对象关系映射了。

但是我们为什么要使用对象关系映射模式呢?这主要是因为大多数的程序员都很擅长面向对象编程,但其中只有少部分的人才比较精通关系型数据库。而且数据库的SQL语言晦涩难懂,就算你很精通它,恐怕也不喜欢经常在代码中去写它吧?而对象关系映射模式则很好地解决了这个问题,它允许我们使用面向对象的方式来操作数据库,从而可以从晦涩难懂的SQL语言中解脱出来。

那么接下来我们就看一看LitePal中是如何建表的吧。根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),也就是说,如果我们想要建一张news表,就应该有一个对应的News模型类。新建一个News类,如下所示:

[java]  view plain copy
  1. package com.example.databasetest.model;  
  2.   
  3. public class News {  
  4. }  
然后,表中的每一列其实就是对应了模型类中的一个字段,比如news表中有id、title、content、publishdate、commentcount这几个列,那么在News类中就也应该有这几个字段,代码如下所示:
[java]  view plain copy
  1. public class News {  
  2.       
  3.     private int id;  
  4.       
  5.     private String title;  
  6.       
  7.     private String content;  
  8.       
  9.     private Date publishDate;  
  10.       
  11.     private int commentCount;  
  12.       
  13.     // 自动生成get、set方法  
  14.     ...  
  15. }  
其中id这个字段可写可不写,因为即使不写这个字段,LitePal也会在表中自动生成一个id列,毕竟每张表都一定要有主键的嘛。

这里我要特别说明一下,LitePal的映射规则是非常轻量级的,不像一些其它的数据库框架,需要为每个模型类单独配置一个映射关系的XML,LitePal的所有映射都是自动完成的。根据LitePal的数据类型支持,可以进行对象关系映射的数据类型一共有8种,int、short、long、float、double、boolean、String和Date。只要是声明成这8种数据类型的字段都会被自动映射到数据库表中,并不需要进行任何额外的配置。

那么有的朋友可能会问了,既然是自动映射的话,如果News类中有一个字符串字段我并不想让它映射到数据库表中,这该怎么办呢?对此,LitePal同样采用了一种极为轻量的解决方案,只有声明成private修饰符的字段才会被映射到数据库表中,如果你有某一个字段不想映射的话,只需要将它改成public、protected或default修饰符就可以了。

现在模型类已经建好了,我们还差最后一步,就是将它配置到映射列表当中。编辑assets目录下的litepal.xml文件,在<list>标签中加入News模型类的声明:

[html]  view plain copy
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <litepal>  
  3.     <dbname value="demo" ></dbname>  
  4.   
  5.     <version value="1" ></version>  
  6.   
  7.     <list>  
  8.         <mapping class="com.example.databasetest.model.News"></mapping>  
  9.     </list>  
  10. </litepal>  
注意这里一定要填入News类的完整类名。

OK,这样所有的工作就都已经完成了,现在只要你对数据库有任何的操作,news表就会被自动创建出来。比如说LitePal提供了一个便捷的方法来获取到SQLiteDatabase的实例,如下所示:

[java]  view plain copy
  1. SQLiteDatabase db = Connector.getDatabase();  
调用一下上述代码,news表就应该已经创建成功了。我们使用在上一篇文章中学到的SQLite命令来查看一下,打开demo.db数据库,输入.table命令,结果如下图所示:


可以看到,news表已经存在了。另外两张android_metadata和table_schema表是自动生成的,我们不用理。接下来我们还可以再查询一下news表的建表语句,如下图所示:


这就是LitePal根据News类中的字段自动帮我们生成的建表语句,由此也说明,建表操作已经成功完成了。

二、使用LitePal升级表

那么为了模仿传统升级表方式中的需求,现在我们也需要创建一张comment表。第一步该怎么办呢?相信你也许早就已经猜到了,那当然是先创建一个Comment类了,如下所示:

[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. package com.example.databasetest.model;  
  2.   
  3. public class Comment {  
  4.       
  5.     private int id;  
  6.       
  7.     private String content;  
  8.       
  9.     // 自动生成get、set方法   
  10.     ...  
  11. }  
OK,Comment类中有id和content这两个字段,也就意味着comment表中会有id和content这两列。

接着修改litepal.xml中的配置,在映射列表中新增Cooment类,并将版本号加1,如下所示:

[html]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <litepal>  
  3.     <dbname value="demo" ></dbname>  
  4.   
  5.     <version value="2" ></version>  
  6.   
  7.     <list>  
  8.         <mapping class="com.example.databasetest.model.News"></mapping>  
  9.         <mapping class="com.example.databasetest.model.Comment"></mapping>  
  10.     </list>  
  11. </litepal>  
没错,就是这么简单,仅仅两步,升级的操作就已经完成了,现在我们只需要操作一下数据库,comment表就会自动生成了,如下所示:
[java]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. SQLiteDatabase db = Connector.getDatabase();  
那么我们还是通过.table命令来查看一下结果,如下图所示:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值