我的新书《Android App开发入门与实战》已于2020年8月由人民邮电出版社出版,欢迎购买。点击进入详情
简介
OrmLite是一个历史悠久的开源数据库框架,鉴于目前一些项目还在使用,所以打算对其调用进行一些封装处理。
解决方案
OrmLite不像GreenDao那样需要建立一个Java工程用来生成数据库文件。
通过规定的注释即可完成数据库和表的创建,比如@DatabaseTable、@DatabaseField等。
拿User表来举例:
@DatabaseTable(tableName = User.TABLE_NAME_USERS)
public class User implements Serializable {
public static final String TABLE_NAME_USERS = "users";
public static final String FIELD_NAME_ID = "id";
public static final String FIELD_NAME_NAME = "name";
@DatabaseField(columnName = FIELD_NAME_ID, generatedId = true)
private int mId;
@DatabaseField(columnName = FIELD_NAME_NAME)
private String mName;
public User() {
// Don't forget the empty constructor, needed by ORMLite.
}
public int getId() {
return mId;
}
public void setId(int mId) {
this.mId = mId;
}
public String getName() {
return mName;
}
public void setName(String mName) {
this.mName = mName;
}
}
我们还需要继承父类OrmLiteSqliteOpenHelper,用来处理数据的创建、升级、删除等操作。
同样,对数据库表的操作也是通过对应的Dao文件来实现的,OrmLite通过如下实现:
OrmLiteHelper ormLiteHelper = OpenHelperManager.getHelper(MyApplication.getInstance(), OrmLiteHelper.class);
然后通过:ormLiteHelper.getDao方式获取到Dao实例,接着就可以对数据库进行控制了。
我们可以建立一个BaseOrmLiteDao的泛型类,这个父类里面主要用来获取对应的子类Dao实例。
public class BaseOrmLiteDao<T> {
protected static OrmLiteHelper ormLiteHelper = OpenHelperManager.getHelper(MyApplication.getInstance(), OrmLiteHelper.class);
protected Dao<T, Integer> dao;
{
try {
dao = ormLiteHelper.getDao(getTClass());
} catch (SQLException e) {
e.printStackTrace();
}
}
public Class<T> getTClass()
{
Class<T> tClass = (Class<T>)((ParameterizedType)getClass().getGenericSuperclass()).getActualTypeArguments()[0];
return tClass;
}
}
UserDao如下:
public class UserDao extends BaseOrmLiteDao<User> {
private static UserDao sINSTANCE;
public static UserDao getInstance() {
if (sINSTANCE == null) {
synchronized (UserDao.class) {
if (sINSTANCE == null) {
sINSTANCE = new UserDao();
}
}
}
return sINSTANCE;
}
public void createUser(String name) {
User user = new User();
user.setName(name);
try {
dao.create(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
public User getUserById(int userId) {
try {
QueryBuilder<User, Integer> qb = dao.queryBuilder();
qb.where().eq(User.FIELD_NAME_ID, userId);
return qb.queryForFirst();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public List<User> getAllUser() {
try {
QueryBuilder<User, Integer> qb = dao.queryBuilder();
return qb.query();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
public void update(User user) {
try {
dao.update(user);
} catch (SQLException e) {
e.printStackTrace();
}
}
public void delete() {
try {
dao.deleteBuilder().delete();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
UserDao里面实现对数据库操作的业务逻辑和种类。
实际应用如下:
UserDao.getInstance().createUser(mEditText.getText().toString());