Activity开源数据库LitePal

具体使用 可以参考项目 这只是记录其他使用方法

1 排序 desc/asc 降序/ 升序

DataSupport.order("x asc").find(Aps.class);

将aps表中的数据按x的大小升序排序,但是我做的东西要把数据库的所有数据读出来,并且按坐标的x,y排序。

在网上看了http://blog.csdn.net/lianghe_work/article/details/45039977的文章,说到sqlite可以用select * from aps order by x desc,id asc实现按x的降序和y的升序排序,于是在Litepal中写成

DataSupport.order("x asc,y asc").find(Aps.class);

删除多个(删除字段age大于22的数据):

DataSupport.deleteAll(TestBean.class, "age > ?" , "22");

查询多条数据

List<News> newsList = DataSupport.findAll(News.class, 1, 3, 5, 7); long[] ids = new long[] { 1, 3, 5, 7 }; List<News> newsList = DataSupport.findAll(News.class, ids); List<News> allNews = DataSupport.findAll(News.class);

指定条件查询

List<News> newsList = DataSupport.where("commentcount > ?", "0").find(News.class); //查询news表中所有评论数大于零的新闻

只需要指定的字段

List<News> newsList = DataSupport.select("title", "content") .where("commentcount > ?", "0").find(News.class);

并且根据指定字段排序

List<News> newsList = DataSupport.select("title", "content") .where("commentcount > ?", "0") .order("publishdate desc").find(News.class);

只需要前10条数据

List<News> newsList = DataSupport.select("title", "content") .where("commentcount > ?", "0") .order("publishdate desc").limit(10).find(News.class);

LIMIT 所要取的记录数目(以基准点为参考点) OFFSET 基准点

List newsList = DataSupport.select(“title”, “content”) 

.where(“commentcount > ?”, “0”) 

.order(“publishdate desc”).limit(10).offset(10) 

.find(News.class);

Activity开源数据库LitePal

开源地址:https://github.com/LitePalFramework/LitePal

虽然不想承认,但是我的SQLite知识真的很差,然后又有LitePal这种简单好用的封装数据库,可以预测我的SQLite知识的小船要一直搁浅了,嗯,没有翻~

LitePal的快速配置

1. 引入Jar包或源码

使用Android Studio在项目的build.gradle中添加:

  1. dependencies {
  2. compile 'org.litepal.android:core:1.3.0'
  3. }

使用Eclipse到这里下载好了jar包之后,把它复制到项目的libs目录中就算是引入成功了。

2. 配置litepal.xml

在项目的assets目录下面新建一个litepal.xml文件,内容如下:

  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="org.litepal.litepalsample.model.Album"></mapping>
  9. <mapping class="org.litepal.litepalsample.model.Song"></mapping>
  10. </list>
  11. </litepal>

  1. <dbname>是数据库的名字
  2. <version>是数据库的版本号
  3. <list>是数据库的映射模型(数据库表)
  4. <mapping>是数据库的映射模型的地址(数据库表结构)

3. 配置LitePalApplication

在AndroidManifest.xml中配置LitePalApplication,如下:

  1. <manifest>
  2. <application
  3. android:name="org.litepal.LitePalApplication"
  4. ...
  5. >
  6. ...
  7. </application>
  8. </manifest>

如果已经有自己的Application,那么久继承一下就好了,如下:

  1. public class MyApplication extends LitePalApplication {
  2. ...
  3. }

LitePal的建表

根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),建表先要新建一个模型类,新建一个DEST类,如下:

  1. public class DEST extends DataSupport {
  2. private String destId;//目的地ID
  3. private String cnName;//中文名
  4. private String enName;//英文名
  5. private String parentId;
  6. private String childrenId;
  7. private long updateTime;
  8.  
  9. // 自动生成get、set方法
  10. }

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

注意

只有private修饰的字段才会被映射到数据库表中,即如果有某一个字段不想映射的话,就设置为public、protected或者default修饰符就可以了。

建立好Model后,我们就把他配置到映射列表中,即编辑assest目录下的litepal.xml文件,在<list>标签中加入DEST类的声明,这里要注意,要类的完整类名。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <litepal>
  3. <dbname value="white" ></dbname>
  4.  
  5. <version value="1" ></version>
  6.  
  7. <list>
  8. <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
  9. </list>
  10. </litepal>

到这里,就完成了LitePal数据库的配置。

LitePal的升级表

1.添加新表

首先创建一个新的模型类,然后把它设置到litepal.xml中,如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <litepal>
  3. <dbname value="white" ></dbname>
  4.  
  5. <version value="1" ></version>
  6.  
  7. <list>
  8. <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
  9. <mapping class="com.whitelaning.example.litepal.SHOPPING"></mapping>
  10. </list>
  11. </litepal>

然后,把litepal.xml中的version的值加一即可,如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <litepal>
  3. <dbname value="white" ></dbname>
  4.  
  5. <version value="2" ></version>
  6.  
  7. <list>
  8. <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
  9. <mapping class="com.whitelaning.example.litepal.SHOPPING"></mapping>
  10. </list>
  11. </litepal>

2.旧表添加新列

首先在需要升级的模型类中添加新的private修饰的字段,如下:

  1. public class DEST extends DataSupport {
  2. private String destId;//目的地ID
  3. private String cnName;//中文名
  4. private String enName;//英文名
  5. private String parentId;
  6. private String childrenId;
  7. private long updateTime;
  8. private String imagePath;//(新增加的列)
  9.  
  10. // 自动生成get、set方法
  11. }

然后再把litepal.xml中的version的值加一即可,如下:

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <litepal>
  3. <dbname value="white" ></dbname>
  4.  
  5. <version value="3" ></version>
  6.  
  7. <list>
  8. <mapping class="com.whitelaning.example.litepal.DEST"></mapping>
  9. <mapping class="com.whitelaning.example.litepal.SHOPPING"></mapping>
  10. </list>
  11. </litepal>

LitePal的存储操作

LitePal要存储数据,首先模型类要继承DataSupport,即:

  1. public class DEST extends DataSupport {
  2.  
  3. }

继承了DataSupport类之后,这些实体类就拥有了进行CRUD操作的能力。

存储操作:

  1. DEST mDest = new DEST();
  2. mDest.setDestId("123421");
  3. mDest.save();

并且save()操作是有返回值的,所以可以这样:

  1. if (mDest.save()) {
  2. Toast.makeText(context, "存储成功", Toast.LENGTH_SHORT).show();
  3. } else {
  4. Toast.makeText(context, "存储失败", Toast.LENGTH_SHORT).show();
  5. }

LitePal的修改操作

如果想把DEST表中id为4的destId改为"1",可以这样写:

  1. ContentValues values = new ContentValues();
  2. values.put("destId", "1");
  3. DataSupport.update(DEST.class, values, 4);
  4.  
  5. //或者用下面这种方法
  6.  
  7. DEST updateNews = new DEST();
  8. updateNews.setDestId("1");
  9. updateNews.update(4);

如果想把DEST表中所有destId为"1"的改为"2"可以这样写:

  1. ContentValues values = new ContentValues();
  2. values.put("destId", "2");
  3. DataSupport.updateAll(DEST.class, values, "destId = ?", "1");
  4.  
  5. //或者用下面这种方法
  6.  
  7. DEST updateNews = new DEST();
  8. updateNews.setdestId("2");
  9. updateNews.updateAll("destId = ?", "1");

LitePal的删除操作

比如说我们想删除DEST表中id为2的记录,就可以这样写:

DataSupport.delete(News.class, 2);

想把DEST表中destId为“1”的所有数据删除,就可以这样写:

DataSupport.deleteAll(DEST.class, "destId = ? ", "1");

如果我们想把DEST表中所有的数据全部删除掉,就可以这样写:

DataSupport.deleteAll(DEST.class);

LitePal的查询操作

查询DEST表中id为1的这条记录,使用LitePal就可以这样写:

DEST mDest = DataSupport.find(DEST.class, 1);

想要获取DEST表中的第一条数据,只需要这样写:

DEST firstDest = DataSupport.findFirst(DEST.class);

想要获取News表中的最后一条数据,只需要这样写:

DEST lastDest = DataSupport.findLast(DEST.class);

想把DEST表中id为1、3、5、7的数据都查出来,只需要这样写:

List<DEST> mDestList = DataSupport.findAll(DEST.class, 1, 3, 5, 7);

查询所有数据,只需要这样写:

List<DEST> mDestList = DataSupport.findAll(DEST.class);

想查询DEST表中所有父类id为"1"的数据,就可以这样写:

List<DEST> mDestList = DataSupport.where("parentId = ?", "1").find(DEST.class);

许你并不需要那么多的数据,而是只要cnName和enName这两列数据。那么也很简单,我们只要再增加一个连缀就行了,如下所示:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").find(DEST.class);

也许你还要数据按照添加的时间倒序排列,那么可以这样:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").order("updateTime desc").find(DEST.class);

数据太多了,其实你只要前10行就行了,那么可以这样:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").order("updateTime desc").limit(10).find(DEST.class);

如果我们想进行分页展示,那么翻页了,怎么办?可以添加一个偏移量就好了,这样:

List<DEST> mDestList = DataSupport.select("cnName", "enName").where("parentId = ?", "1").order("updateTime desc").limit(10).offset(10).find(DEST.class);

LitePal的聚合函数

count()

如果想统计行数,那么就可以调用count()即可:

int result = DataSupport.count(DEST.class);

如果想统计parentId为"1"的数据的行数,那么可以这样:

int result = DataSupport.where("parentId = ?", "1").count(DEST.class);

sum()

如果想统计一下DEST表中,所有updateTime的和(虽然毫无用处....),那么可以这样:

long result = DataSupport.sum(DEST.class, "updateTime", long.class);

注意

第一个参数很简单,还是传入的Class,用于指定去统计哪张表当中的数据。第二个参数是列名,表示我们希望对哪一个列中的数据进行求合。第三个参数用于指定结果的类型,这里我们指定成int型,因此返回结果也是int型。

sum()方法只能对具有运算能力的列进行求合,比如说整型列或者浮点型列,如果你传入一个字符串类型的列去求合,肯定是得不到任何结果的,这时只会返回一个0作为结果。

剩下的聚合函数方法大同小异了:

猜你喜欢

转载自blog.csdn.net/u013297881/article/details/81067255