【Android TimeCat】 OrmLite框架入门与封装(一)快速入门

背景

本来打算把Time Cat做成完全依赖网络的,但是考虑到业务场景,离线使用的占比不低,只好做个数据库来适应需求。

本文主要针对 Android 使用 OrmLite 框架 对数据库的基本操作介绍,如有那些地方介绍的不对,请指出来,一起学习,一起进步。

添加 OrmLite 包

向工程中添加 OrmLite 的 jar 包有两种方式:

  1. 到 OrmLite 官网下载 ormlite-core-4.49.jar 和 ormlite-android-4.49.jar 两个jar 包添加到工程中。
  2. 在项目中添加依赖的方式。

创建项目中使用DatabaseHelper类

首先要简单说一下 OrmLite 框架OrmLiteSqliteOpenHelper 类 ,OrmLiteSqliteOpenHelper 类继承了 SQLiteOpenHelper。所以,创建项目中的DatabaseHelper 类,要使该类继承 OrmLite 框架OrmLiteSqliteOpenHelper 类来获得 SQLiteHelper.

继承 OrmLiteSqliteOpenHelper 实现几个方法说明

构造函数

1
2
3
4
5
6
7
8
9
public DatabaseHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
/**
* 参数说明:
* context:上下文。
* databaseName: 数据库名。
* factory: 游标实例,多数时候设置成NULL。
* databaseVersion:数据库版本,当数据库版本升高时,会调用onUpgrade()方法。
*/

创建数据库表

1
2
3
4
5
6
7
8
9
10
11
12
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { 
/**
* 在该方法中进行创建表操作
* 使用`OrmLite 框架`的 TableUtils.createTable进行创建表操作。
*eg.
*/

try {
TableUtils.createTable(connectionSource, UserInfo.class);
} catch (SQLException e) {
e.printStackTrace();
}

数据库版本提升更新方法

1
2
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) { 
//在该方法中进行更新操作

创建数据库表对应的 Bean

Bean 类中的变量对应数据库中的字段,在 Bean 中使用注解方式进行设置。
实例代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
@DatabaseTable(tableName = "tb_user_info")
public class UserInfo {

@DatabaseField(generatedId = true)
private int userId;
@DatabaseField(columnName = "name")
private String name;
@DatabaseField(columnName = "addr")
private String addr;
@DatabaseField(columnName = "sex")
private String sex;

// 对应字段的set 和 get 方法

}

数据库中字段注解设置说明:

字段名 参数名 说明
@DatabaseTable tableName 指定表明,没有将使用类名作为表明
@DatabaseField cloumnName 指定字段名,不指定则变量名作为字段名
canBeNull 是否可以为null
dataType 指定字段的类型
defaultValue 指定默认值
width 指定长度
id 指定字段为id
generatedId 指定字段为自增长的id
generatedIdSequence
foreign 指定这个字段的对象是一个外键,外键值是这个对象的id
useGetSet 指定ormlite访问变量使用set,get方法默认使用的是反射机制直接访问变量
throwIfNull 如果空值抛出异常
persisted 指定是否持久化此变量,默认true
unique 字段值唯一
uniqueCombo 整列的值唯一
index 索引
uniqueIndex 唯一索引
foreignAutoRefresh 外键值,自动刷新
uniqueIndex 外键值,自动刷新
foreignAutoCreate 外键不存在时是否自动添加到外间表中
foreignColumnName 外键字段指定的外键表中的哪个字段

获取操作数据库对应表的 Bean 的 Dao

OrmLite 框架中。操作数据是通过 对应BeanDao 实现的。

那么Dao 是如何获取的呢?

Dao 的获取方式:

对应Bean是通过 OrmLiteSqliteOpenHelper 类中 getDao(Class clazz) 方法获取。

实例代码如下:

1
2
3
4
5
6
7
8
9
public class UserDao {

private DatabaseHelper helper;

public Dao<UserInfo,Integer> getUserDao(Context context) throws SQLException {
helper = new DatabaseHelper(context);
return helper.getDao(UserInfo.class);
}
}

通过 Dao 对数据库进行简单增、删、改、查操作

1
UserDao mDao = new UserDao();

增:

1
2
3
4
5
6
try {
UserInfo u1 = new UserInfo("zhangsan","beijng","nan");
mDao.getUserDao(mContext).create(u1);
} catch (SQLException e) {
e.printStackTrace();
}

删:
下面的示例是使用删除集合完成删除

1
2
3
4
5
6
7
8
9
10
11
12
13
14
//修改和删除要通过id 进行操作
UserInfo u4 = new UserInfo("zhangsan","北京","女");
u4.setUserId(4);

UserInfo u3 = new UserInfo("招商","beijng","女");
u3.setUserId(3);
try {
Collection<UserInfo> collection = new ArrayList<UserInfo>();
collection.add(u4);
collection.add(u3);
mDao.getUserDao(mContext).delete(collection);
} catch (SQLException e) {
e.printStackTrace();
}

改:

1
2
3
4
5
6
7
8
UserInfo u4 = new UserInfo("updateMan","北京","女");
u4.setUserId(4);

try {
mDao.getUserDao(mContext).update(u4);
} catch (SQLException e) {
e.printStackTrace();
}

查:
注:这里只举了一个查询方式,查询全部。条件查询请参考(OrmLite 复杂条件查询)

1
2
3
4
5
6
7
8
9
try {
List<UserInfo> infos = mDao.getUserDao(mContext).queryForAll();
for(UserInfo info : infos){
//在此处使用TextView进行显示
mUserText.append("\n" + info.toString() + "\n");
}
} catch (SQLException e) {
e.printStackTrace();
}

参考:
http://blog.csdn.net/u013501637/article/details/52388802

当前网速较慢或者你使用的浏览器不支持博客特定功能,请尝试刷新或换用Chrome、Firefox等现代浏览器