您的位置:首页 > 移动开发 > Android开发

Android开发初级00_1如何在安卓开发中使用数据库之量框架LitePal

2017-08-13 23:59 465 查看

Android SQLite轻量框架LitePal

简介

LitePal是一个开源的安卓库,允许程序员极其简单的操作SQLite数据库。甚至不用写一句SQL语句就能完成大多数SQLite数据库操作,包括创建去或者更新表,CRUD操作,聚合操作等等。

特点

使用对象关系映射模型(ORM)。

基本上0配置,仅仅需要一个配置文件。

自动与表保持联动(创建、修改或者删除)。

多数据库支持。

对SQL语句进行封装。

简洁的查询语句。

同时支持原生API的使用。

一,配置

1. 导入库

下载jar文件点击进入选择合适的版本进行下载

或者

直接在gradle中引入依赖:

JAVA
dependencies {
compile 'org.litepal.android:core:1.5.1'
}


2. 配置litepal.xml文件

创建assert文件夹(与res同级),在其中创建litepal.xml文件,在里面如下配置:

XML
<?xml version="1.0" encoding="utf-8"?>
<litepal>
<!--
定义数据库的名称,默认情况下需要添加后缀.db,如果没有添加litepal内部将会自动添加该后缀
-->
<dbname value="demo" />

<!--
定义数据库的版本,每次你想升级数据库的时候在此处进行版本号定义.通常当你修改了下面mapping中的model类后需要升级,版本号加一
-->
<version value="1" />

<!--
定义模型类(如同javabean)在mapping标签中,litepal将会为每个类创建一个表,表中的列将是类中声明为private的成员.例如:
<list>
<mapping class="com.test.model.Reader" />
<mapping class="com.test.model.Magazine" />
</list>
-->
<list>
</list>

<!--
定义数据库文件创建在内部存储还是外部存储,值为internal或者external
默认为internal
例如:
<storage value="external" />
-->
<storage value="external" />
</litepal>


3. 配置LitePalApplication

为了避免每次使用都需要传递Context变量,可以直接在AndroidManifest.xml文件中使用LitePalApplication.

XML
<manifest>
<application
android:name="org.litepal.LitePalApplication"
...
>
...
</application>
</manifest>


如果有自定义的Application,让它继承至LitePalApplication即可.然后需要Application的onCreate方法中初始化:

JAVA
public class MyOwnApplication extends AnotherApplication {

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


二,使用

1. 创建表

定义模型类,假如创建了一个Album类:

JAVA
public class Album extends DataSupport {

@Column(unique = true, defaultValue = "unknown")
private String name;

private float price;

private byte[] cover;

private List<Song> songs = new ArrayList<Song>();

// generated getters and setters.
...
}


然后在配置文件litepal.xml文件中配置:

XML
<list>
<mapping class="org.litepal.litepalsample.model.Album" />
</list>


之后在你下次操作数据库时该表自动创建.你就假设该表已经存在,当你打开,插入数据等操作时litepal检测到表不存在将会自动创建.

2. 更新表

直接对模型类进行修改:

JAVA
public class Album extends DataSupport {

@Column(unique = true, defaultValue = "unknown")
private String name;

@Column(ignore = true)
private float price;

private byte[] cover;

private Date releaseDate;

private List<Song> songs = new ArrayList<Song>();

// generated getters and setters.
...
}


这里添加了一个releaseDate变量(字段),price变量(字段)注释为忽略.

然后在litepal.xml文件中更新版本号:

XML
<!-- 假设之前版本号为1 -->
<version value="2" ></version>


表将会在下次对数据库进行操作时更新,添加一个releaseDate字段,移除price字段.

3. 保存数据

继承自DataSupport的子类将会有save方法,调用即可保存数据到数据库:

JAVA
Album album = new Album();
album.setName("album");
album.setPrice(10.99f);
album.setCover(getCoverImageBytes());
album.save();


4. 查询数据

查询单条数据根据id:

JAVA
Album album = DataSupport.find(Album.class, id);


条件查询:

JAVA
//注意问号
List<Album> albums = DataSupport.where("name=?", "fantasy").order("price").find(Album.class);


5. 更新数据

查询到数据取得模型类的对象,调用set方法修改后调用save保存即可.

JAVA
Album albumToUpdate = DataSupport.find(Album.class, 1);
albumToUpdate.setPrice(20.99f); // raise the price
albumToUpdate.save();


6. 删除数据

和查询数据用法类似.

根据id删除单条数据:

Java
DataSupport.delete(Song.class, id);


删除所有数据:

JAVA
DataSupport.deleteAll(Song.class, "duration > ?" , "350");


7. 异步操作

当操作的数据量过大时可能需要异步操作避免当前线程阻塞,litepal支持所有CRUD操作方法异步操作.(都有对应的async方法)

例如:

JAVA
DataSupport.findAllAsync(Song.class).listen(new FindMultiCallback() {
@Override
public <T> void onFinish(List<T> t) {
List<Song> allSongs = (List<Song>) t;
}
});


如果需要的话,调用listen方法添加该操作的监听器.

以上还是有不少是借鉴各位大神的网志作为参考!

这一次可要我晕了好久,总是丢三落四的。

总算是把这次的网志给补上了!

还是和往常一样,给大家推荐一首歌!

Clsr (Aash Mehta Flip)

最后还是祝大家酷酷的!不知道会不会有人赞我。。。罒ω罒

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息