Android数据库LitePal

前言

其实为了方便我们对数据库表进行管理,Android本身就提供了一个帮助类:SQLiteOpenHelper。这个类集创建和升级数据库于一身,并且自动管理了数据库版本,算是一个非常好用的工具。

简述

LitePal是一款开源的Android数据库框架,它采用了对象关系映射(ORM)的模式,并将我们平时开发时最常用到的一些数据库功能进行了封装,使得不用编写一行SQL语句就可以完成各种建表、増删改查的操作。

LitePal的基本用法

LitePal的配置

  • 引入jar包、依赖或导入源码库
    使用AS gradle依赖
dependencies {
    compile 'org.litepal.android:core:1.5.0'
}

导入jar包和源码可以点击这里选择你需要的版本下载即可,下载好后具体操作就不细说了

  • 配置litepal.xml
    在项目的assets目录下面新建一个litepal.xml文件,并将以下代码拷贝进去:
<?xml version="1.0" encoding="utf-8"?>  
<litepal>  
    <dbname value="demo" />  
    <version value="1" />  
    <list>  
    <mapping class="" />
    </list>  
    <!-- <dbname>是数据库的名字
         <version>是数据库的版本号
         <list>是数据库的映射模型(数据库表)
         <mapping>是数据库的映射模型的地址(数据库表结构) -->
</litepal> 
  • 配置LitePalApplication
    1).在AndroidManifest.xml中配置LitePalApplication,如下:
<manifest>  
    <application  
        android:name="org.litepal.LitePalApplication"  
        ...  
    >  
    ...  
    </application>  
</manifest>

2).如果使用了自定义的Application继承LitePalApplication即可
3).如果你项目中的自定义APP是继承了一个jar包中的第三方Application(即:源码修改不了)
方案一:
1. 你可以把LitePal的源码下载下来,然后把src目录下的所有代码直接拷贝到你项目的src目录下面
2. 接着打开LitePalApplication类,将它的继承结构改成继承自第三方Application
3. 再让MyApplication继承自LitePalApplication,这样所有的Application就都可以在一起正常工作了

方案二:

public class MyOwnApplication extends AnotherApplication {

    @Override
    public void onCreate() {
        super.onCreate();
        LitePal.initialize(this);
    }
    ...
}

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

建表

根据对象关系映射模式的理念,每一张表都应该对应一个模型(Model),比如对应的News模型

//TODO 使用LitePal只有声明private的字段才会被映射到数据表中,如果不想映射的话,修饰符设置为public、protected、default就可以了
public class News  {
    private int id;
    private String title;
    private String content;
    private Date publishDate;
    private int commentCount;
    // getter、setter
}

建立后再配置到映射表中,编辑asset目录下的litepal.xml的文件,在标签下加入News模型类的声明

<?xml version="1.0" encoding="utf-8"?>
    <litepal>
        <dbname value="demo"></dbname>
        <version value="1"></version>
        <list>
            <mapping class="bz.sunlight.store.jeffdatabasetest.model.News"></mapping>
        </list>
</litepal>

LitePal的增删改查基本操作

LitePal要存储数据,首先模型类要继承DataSupport,继承了DataSupport类之后,这些实体类就拥有了进行CRUD操作的能力。如下:

public class News extends DataSupport {

}
  • 增加操作:
News news = new News(,,new Date(),2);
news.setTitle("这是 一条新闻标题");
news.setContent("这是一条新闻广告");
news.setPublishDate(new Date());
news.setCommentCount(2);
news.save();
//id可以不用写,在save完之后主键id会自动递增赋值,还有save()操作是有返回值的,可以这样
if (news.save()) {  
    Toast.makeText(context, "添加成功", Toast.LENGTH_SHORT).show();  
} else {  
    Toast.makeText(context, "添加失败", Toast.LENGTH_SHORT).show();  
}
  • 修改操作
               //第一种方法
                News updateNews = new News();
                updateNews.setContent("这是一条假数据");
                updateNews.update(1);

                //第二种方法
                News updateNews = new News();
                updateNews.setContent("这是一条假数据");
                updateNews.updateAll("id = ?","2");
  • 删除操作
                //删除id为2的数据
                DataSupport.delete(News.class, 2);

                // 删除id为1的数据
                DataSupport.deleteAll(News.class, "id = ? ", "1");

                // 删除全部
                DataSupport.deleteAll(News.class);
  • 查询操作
   //查询News表中id为14的这条记录
    News news = DataSupport.find(News.class, 14);

    //想要获取News表中的第一条数据
    News firstNews = DataSupport.findFirst(News.class);

    //想要获取News表中的最后一条数据
    News lastNews = DataSupport.findLast(News.class);

    //想把News表中id为141517的数据都查出来
    List<News> mNewsList = DataSupport.findAll(News.class, 14, 15, 17);

    //数据太多了,其实你只要前3行就行了
    List<News> mNewsList1 = DataSupport.limit(3).find(News.class);

    //想进行分页展示,那么翻页了,怎么办?可以添加一个偏移量就好了
    List<News> mNewsList2 = DataSupport.limit(3).offset(3).find(News.class);

好了,到目前为止你已经算是对LitePal的用法入门了,本篇文章内容主要讲的是表一对一的情况。有兴趣的朋友也可以尝试去实现多对一、一对多的表结构,只需要注意的的是在litepal.xml里面的版本version升级和在List添加新建表的类,其他增删改查形式都差不多。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值