Android(安卓)SQLite 抽象出CRUD操作工具类
16lz
2022-06-16
1, 定义统一的Dao接口
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();}}@Overridepublic T getSingleById(int id) {if (dao == null)return null;try {return dao.queryForId(id);} catch (SQLException e) {e.printStackTrace();}return null;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic 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;}@Overridepublic boolean delete(T video) {if (dao == null)return false;try {return dao.delete(video) == 1;} catch (SQLException e) {e.printStackTrace();}return false;}@Overridepublic 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操作了....
更多相关文章
- android如何使用menu键
- Android(安卓)7.1使用以太网口共享本机4G网络给其他设备
- MUI调用自定义插件(Android)
- Android中如何使用基于监听的事件处理(上)
- Android获取系统的内存使用率
- Android使用binder访问service的方式
- 箭头函数的基础使用
- NPM 和webpack 的基础使用
- Python list sort方法的具体使用