Android SQLite 抽象出CRUD操作工具类
2016-05-16 14:39
363 查看
1, 定义统一的Dao接口
2, 定义抽象Dao
4, 使用的时候就很简单了:
public interface IDao<T> { public abstract T getSingleById(int id); public abstract List<T> getAll(); public abstract boolean update(T video); public abstract int deleteByIds(Collection<Integer> ids); public abstract boolean delete(T video); public abstract boolean add(T video); public int updateBySQL(String statement, String... arguments); public List<T> getListByFieldAndOrderBy(Map<String, Object> fieldValues, Map<String, Boolean> orderBy); }
2, 定义抽象Dao
public abstract class AbstractDao<T> implements IDao<T> { private Dao<T, Integer> dao; public AbstractDao(Context context, Class<T> clazz) { try { dao = DBHelp.getInstance(context).getDao(clazz); } catch (SQLException e) { e.printStackTrace(); } } @Override public T getSingleById(int id) { if (dao == null) return null; try { return dao.queryForId(id); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public List<T> getListByFieldAndOrderBy(Map<String, Object> fieldValues, Map<String, Boolean> orderBy) { if (dao == null) return null; try { QueryBuilder<T, Integer> qb = dao.queryBuilder(); if (orderBy != null) { for (Map.Entry<String, Boolean> entry : orderBy.entrySet()) { qb.orderBy(entry.getKey(), entry.getValue()); } } if (fieldValues != null) { Where<T, Integer> where = qb.where(); for (Map.Entry<String, Object> entry : fieldValues.entrySet()) { where.eq(entry.getKey(), entry.getValue()); } } return qb.query(); // return dao.queryForFieldValuesArgs(fieldValues); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public List<T> getAll() { if (dao == null) return null; try { return dao.queryForAll(); } catch (SQLException e) { e.printStackTrace(); } return null; } public List<T> getAllOrderBy(String columnName, boolean ascending) { if (dao == null) return null; try { return dao.queryBuilder().orderBy(columnName, ascending).query(); } catch (SQLException e) { e.printStackTrace(); } return null; } @Override public boolean update(T t) { if (dao == null) return false; try { return dao.update(t) == 1; } catch (SQLException e) { e.printStackTrace(); } return false; } public int updateBySQL(String statement, String... arguments) { if (dao == null) return 0; try { return dao.updateRaw(statement, arguments); } catch (SQLException e) { e.printStackTrace(); } return 0; } @Override public int deleteByIds(Collection<Integer> ids) { if (dao == null) return 0; try { return dao.deleteIds(ids); } catch (SQLException e) { e.printStackTrace(); } return 0; } public boolean deleteAll(String table) { if (dao == null) return false; try { return dao.executeRaw("DELETE FROM " + table) > 0; } catch (SQLException e) { e.printStackTrace(); } return false; } @Override public boolean delete(T video) { if (dao == null) return false; try { return dao.delete(video) == 1; } catch (SQLException e) { e.printStackTrace(); } return false; } @Override public boolean add(T t) { if (dao == null) return false; try { return dao.createIfNotExists(t) != null; // return dao.create(video) == 1; } catch (SQLException e) { e.printStackTrace(); } return false; } }3, 在逻辑bean里使用很简单:
public class QuestionDao extends AbstractDao<Question> { public QuestionDao(Context context) { super(context, Question.class); } }
4, 使用的时候就很简单了:
QuestionDao dao = new QuestionDao(); dao.add(T); ...这样就可以很简单的做CRUD操作了....
相关文章推荐
- MVP+Retrofit+RXAndroid使用详解
- 使用Dagger 2进行依赖注入 - API介绍
- 界面之下:还原真实的 MVC、MVP、MVVM 模式
- AndroidStudio或IDEA中连接github失败:Can't login: Connect to api.github.com:443
- cygwin编译jni项目
- android应用换肤功能的实现
- android SQLite数据库
- android切换buck构建项目
- android launcher 文件夹美化类似小米Launcher
- 安卓开发中Gallery控件的使用
- Java、Android中Math类中常用方法的简单介绍
- 细说Android事件传递机制(dispatchTouchEvent、onInterceptTouchEvent、onTouchEvent)
- Failed to find 'ANDROID_HOME' environment variable
- Android Button按钮点击背景和文字变化
- android 输入法弹出键盘把listview顶上去,保留顶部标题栏位置不动
- Android Studio添加assets文件夹
- LayoutParams继承于Android.View.ViewGroup.LayoutParams.
- Android Studio你不知道的调试技巧
- android 进入页面时让焦点固定在顶部
- android 开发奇葩问题