【Android TimeCat】 OrmLite框架入门与封装(一)快速入门
背景
本来打算把Time Cat
做成完全依赖网络的,但是考虑到业务场景,离线使用的占比不低,只好做个数据库来适应需求。
本文主要针对 Android 使用 OrmLite 框架
对数据库的基本操作介绍,如有那些地方介绍的不对,请指出来,一起学习,一起进步。
添加 OrmLite 包
向工程中添加 OrmLite 的 jar 包有两种方式:
- 到 OrmLite 官网下载 ormlite-core-4.49.jar 和 ormlite-android-4.49.jar 两个jar 包添加到工程中。
- 在项目中添加依赖的方式。
创建项目中使用DatabaseHelper类
首先要简单说一下 OrmLite 框架
中 OrmLiteSqliteOpenHelper
类 ,OrmLiteSqliteOpenHelper
类继承了 SQLiteOpenHelper
。所以,创建项目中的DatabaseHelper
类,要使该类继承 OrmLite 框架
的 OrmLiteSqliteOpenHelper
类来获得 SQLiteHelper
.
继承 OrmLiteSqliteOpenHelper
实现几个方法说明
构造函数
1 | public DatabaseHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) { |
创建数据库表
1 | public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) { |
数据库版本提升更新方法
1 | 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"tb_user_info") (tableName =
public class UserInfo {
true) (generatedId =
private int userId;
"name") (columnName =
private String name;
"addr") (columnName =
private String addr;
"sex") (columnName =
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 框架
中。操作数据是通过 对应Bean
的Dao
实现的。
那么Dao 是如何获取的呢?
Dao 的获取方式:
对应Bean是通过 OrmLiteSqliteOpenHelper
类中 getDao(Class clazz)
方法获取。
实例代码如下:1
2
3
4
5
6
7
8
9public 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
6try {
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
8UserInfo 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
9try {
List<UserInfo> infos = mDao.getUserDao(mContext).queryForAll();
for(UserInfo info : infos){
//在此处使用TextView进行显示
mUserText.append("\n" + info.toString() + "\n");
}
} catch (SQLException e) {
e.printStackTrace();
}