前言
其实为了方便我们对数据库表进行管理,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为14、15、17的数据都查出来
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添加新建表的类,其他增删改查形式都差不多。