您的位置:首页 > 移动开发 > Android开发

Android SQLite 抽象出CRUD操作工具类

2016-05-16 14:39 363 查看
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();
}
}

@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操作了....
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: