OrmLite 三篇文章
简介
本片文章主要是针对 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 实现几个方法说明
构造函数
public DatabaseHelper(Context context, String databaseName, SQLiteDatabase.CursorFactory factory, int databaseVersion) {
super(context, databaseName, factory, databaseVersion);
/**
* 参数说明:
* context:上下文。
* databaseName: 数据库名。
* factory: 游标实例,多数时候设置成NULL。
* databaseVersion:数据库版本,当数据库版本升高时,会调用onUpgrade()方法。
*/
}
创建数据库表
public void onCreate(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource) {
/**
* 在该方法中进行创建表操作
* 使用OrmLite 框架的 TableUtils.createTable进行创建表操作。
*eg.
*/
try {
TableUtils.createTable(connectionSource, UserInfo.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
数据库版本提升更新方法
public void onUpgrade(SQLiteDatabase sqLiteDatabase, ConnectionSource connectionSource, int i, int i1) {
//在该方法中进行更新操作
}
创建数据库表对应的 Bean
Bean 类中的变量对应数据库中的字段,在 Bean 中使用注解方式进行设置。
实例代码如下:
@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 框架中。操作数据是通过 对应Bean的Dao 实现的。
那么Dao 是如何获取的呢?
Dao 的获取方式:
对应Bean是通过 OrmLiteSqliteOpenHelper 类中 getDao(Class<T> clazz) 方法获取。
实例代码如下:
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 对数据库进行简单增、删、改、查操作
UserDao mDao = new UserDao();
增:
try {
UserInfo u1 = new UserInfo("zhangsan","beijng","nan");
mDao.getUserDao(mContext).create(u1);
} catch (SQLException e) {
e.printStackTrace();
}
删:
下面的示例是使用删除集合完成删除
//修改和删除要通过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();
}
改:
UserInfo u4 = new UserInfo("updateMan","北京","女");
u4.setUserId(4);
try {
mDao.getUserDao(mContext).update(u4);
} catch (SQLException e) {
e.printStackTrace();
}
查:
注:这里只举了一个查询方式,查询全部。条件查询请参考(OrmLite 复杂条件查询)
try {
List<UserInfo> infos = mDao.getUserDao(mContext).queryForAll();
for(UserInfo info : infos){
//在此处使用TextView进行显示
mUserText.append("\n" + info.toString() + "\n");
}
} catch (SQLException e) {
e.printStackTrace();
}