Android SQLite 抽象出CRUD操作工具类

来源:互联网 发布:女寝还魂知乎 编辑:程序博客网 时间:2024/05/18 03:45

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操作了....
0 0
原创粉丝点击