前面的一篇文章Android ORM系列之ActiveAndroid 介绍了ActiveAndroid的使用方法,但是ActiveAndroid有一个很明显的缺点,就是所有的实体类必须继承Model类才能进行CRUD,这是典型的php中的ActiveRecord方式的数据库操作。这时候我们会想一下,在Java Web中,hibernate或者mybatis就很好,其实在android中也有这么一个框架,但是这个框架是java的,只不过它支持Android而已,它就是ORMLite。这篇文章不会过度介绍ORMlite本身的一些操作。如果感兴趣的话可以阅读下面的几篇翻译的文章.
- Android数据库ORMlite框架翻译系列(第一章)
- Android数据库ORMlite框架翻译系列(第二章:part 1)
- Android数据库ORMlite框架翻译系列(第二章:part 2)
- Android数据库ORMlite框架翻译系列(第二章:part 3)
然而ormlite提供给我们的还不够使用,我们能不能打造一个类似java web那样的dao层的完全分离,其实ORMLite已经为我们提供了这么一个类,它就是com.j256.ormlite.dao.BaseDaoImpl,但是这个类在我写这个dao前还没发现,后来发现有这个类,简直想撞豆腐,不过呢,这个类也不是那么完美,我们还是自己来实现一遍。
我们写的这个dao,如果你对事务要求有较高的要求,建议将dao层中的事务操作提取到service层中去。一个很简单的例子见这篇文章 (android)初探ormlite实现仿web那样写dao,service。这里我为了方便起见,将事务操作都扔到了dao中,建议还是单独提到service层中。下面贴出整个dao的代码,代码很简单。具体内容见注释把。
在使用前加入依赖
compile 'com.j256.ormlite:ormlite-android:4.48'
我们首先要提供一个Helper类。就是完成数据库的初始化或者更新。然后提供一个helper的单例。
/** * Helper类,提供单例Helper * User:lizhangqu([email protected]) * Date:2015-08-26 * Time: 12:04 */
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
private static final String DB_NAME = "sc.db";
//数据库名
private static final int DB_VERSION = 1;
//数据库版本
private static DatabaseHelper instance;
//Helper单例
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
//创建表
try {
TableUtils.createTable(connectionSource, Student.class);
TableUtils.createTable(connectionSource, Course.class);
TableUtils.createTable(connectionSource, StudentCourse.class);
} catch (SQLException e) {
e.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource, int oldVersion, int newVersion) {
//更新表
try {
TableUtils.dropTable(connectionSource, StudentCourse.class, true);
TableUtils.dropTable(connectionSource, Student.class, true);
TableUtils.dropTable(connectionSource, Course.class, true);
onCreate(database, connectionSource);
} catch (SQLException e) {
e.printStackTrace();
}
}
/** * 双重加锁检查 * * @param context 上下文 * @return 单例 */
public static synchronized DatabaseHelper getInstance(Context context) {
if (instance == null) {
synchronized (DatabaseHelper.class) {
if (instance == null) {
instance = new DatabaseHelper(context);
}
}
}
return instance;
}
}
接下来就是这个通用的dao,一个抽象类,抽象方法是getDao,交给子类实现。其实你也可以直接在本类实现,实际差别不会太大。这个dao的主键是Integer类型的,如果你需要其他类型,请自行修改。
/** * 数据库CRUD操作的Dao,子类继承实现抽象方法,也提供一个简单的泛型实现类 * User:lizhangqu(513163535@qq.com) * Date:2015-08-26 * Time: 12:25 */
public abstract class BaseDao<T, Integer> {
protected DatabaseHelper mDatabaseHelper;
//helper
protected Context mContext;
//上下文
public BaseDao(Context context) {
if (context == null) {
throw new IllegalArgumentException("Context can't be null!");
//如果为空,则扔出非法参数异常
}
mContext = context.getApplicationContext();
//避免产生内存泄露,使用getApplicationContext()
mDatabaseHelper = DatabaseHelper.getInstance(mContext);
//获得单例helper
}
/** * 抽象方法,重写提供Dao,在BaseDaoImpl里提供了简单的泛型实现,传递实体类Class即可 * * @return Dao类 * @throws SQLException SQLException异常 */
public abstract Dao<T, Integer> getDao() throws SQLException;
/** * 增,带事务操作 * * @param t 泛型实体类 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int save(T t) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int save = dao.create(t);
dao.commit(databaseConnection);
return save;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 增或更新,带事务操作 * @param t 泛型实体类 * @return Dao.CreateOrUpdateStatus * @throws SQLException SQLException异常 */
public Dao.CreateOrUpdateStatus saveOrUpdate(T t) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
Dao.CreateOrUpdateStatus orUpdate = dao.createOrUpdate(t);
dao.commit(databaseConnection);
return orUpdate;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return null;
}
/** * 增,带事务操作 * @param t 泛型实体类集合 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int save(List<T> t) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
for (T item : t) {
dao.create(item);
}
dao.commit(databaseConnection);
return t.size();
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 删,带事务操作 * * @param t 泛型实体类 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int delete(T t) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int delete = dao.delete(t);
dao.commit(databaseConnection);
return delete;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 删,带事务操作 * * @param list 泛型实体类集合 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int delete(List<T> list) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int delete = dao.delete(list);
dao.commit(databaseConnection);
return delete;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 删,带事务操作 * * @param columnNames 列名数组 * @param columnValues 列名对应值数组 * @return 影响的行数 * @throws SQLException SQLException异常 * @throws InvalidParameterException InvalidParameterException异常 */
public int delete(String[] columnNames, Object[] columnValues) throws SQLException, InvalidParameterException {
List<T> list = query(columnNames, columnValues);
if (null != list && !list.isEmpty()) {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int delete = dao.delete(list);
dao.commit(databaseConnection);
return delete;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
}
return 0;
}
/** * 删,带事务操作 * * @param id id值 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int deleteById(Integer id) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int delete = dao.deleteById(id);
dao.commit(databaseConnection);
return delete;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 删,带事务操作 * @param ids id集合 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int deleteByIds(List<Integer> ids) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int delete = dao.deleteIds(ids);
dao.commit(databaseConnection);
return delete;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 删,带事务操作 * * @param preparedDelete PreparedDelete类 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int delete(PreparedDelete<T> preparedDelete) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int delete = dao.delete(preparedDelete);
dao.commit(databaseConnection);
return delete;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 改,带事务操作 * * @param t 泛型实体类 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int update(T t) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int update = dao.update(t);
dao.commit(databaseConnection);
return update;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 改,带事务操作 * @param preparedUpdate PreparedUpdate对象 * @return 影响的行数 * @throws SQLException SQLException异常 */
public int update(PreparedUpdate<T> preparedUpdate) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
int update = dao.update(preparedUpdate);
dao.commit(databaseConnection);
return update;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 查,带事务操作 * * @return 查询结果集合 * @throws SQLException SQLException异常 */
public List<T> queryAll() throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
List<T> query = dao.queryForAll();
dao.commit(databaseConnection);
return query;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return null;
}
/** * 查,带事务操作 * * @param preparedQuery PreparedQuery对象 * @return 查询结果集合 * @throws SQLException SQLException异常 */
public List<T> query(PreparedQuery<T> preparedQuery) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
List<T> query = dao.query(preparedQuery);
dao.commit(databaseConnection);
return query;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return null;
}
/** * 查,带事务操作 * * @param columnName 列名 * @param columnValue 列名对应值 * @return 查询结果集合 * @throws SQLException SQLException异常 */
public List<T> query(String columnName, String columnValue) throws SQLException {
QueryBuilder<T, Integer> queryBuilder = getDao().queryBuilder();
queryBuilder.where().eq(columnName, columnValue);
PreparedQuery<T> preparedQuery = queryBuilder.prepare();
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
List<T> query = dao.query(preparedQuery);
//also can use dao.queryForEq(columnName,columnValue);
dao.commit(databaseConnection);
return query;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return null;
}
/** * 查,带事务操作 * * @param columnNames * @param columnValues * @return 查询结果集合 * @throws SQLException SQLException异常 */
public List<T> query(String[] columnNames, Object[] columnValues) throws SQLException {
if (columnNames.length != columnNames.length) {
throw new InvalidParameterException("params size is not equal");
}
QueryBuilder<T, Integer> queryBuilder = getDao().queryBuilder();
Where<T, Integer> wheres = queryBuilder.where();
for (int i = 0; i < columnNames.length; i++) {
if (i==0){
wheres.eq(columnNames[i], columnValues[i]);
}else{
wheres.and().eq(columnNames[i], columnValues[i]);
}
}
PreparedQuery<T> preparedQuery = queryBuilder.prepare();
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
List<T> query = dao.query(preparedQuery);
dao.commit(databaseConnection);
return query;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return null;
}
/** * 查,带事务操作 * * @param map 列名与值组成的map * @return 查询结果集合 * @throws SQLException SQLException异常 */
public List<T> query(Map<String, Object> map) throws SQLException {
QueryBuilder<T, Integer> queryBuilder = getDao().queryBuilder();
if (!map.isEmpty()) {
Where<T, Integer> wheres = queryBuilder.where();
Iterator<Map.Entry<String, Object>> iterator = map.entrySet().iterator();
String key = null;
Object value = null;
for (int i = 0; iterator.hasNext(); i++) {
Map.Entry<String, Object> next = iterator.next();
key = next.getKey();
value = next.getValue();
if (i == 0) {
wheres.eq(key, value);
} else {
wheres.and().eq(key, value);
}
}
}
PreparedQuery<T> preparedQuery = queryBuilder.prepare();
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
List<T> query = dao.query(preparedQuery);
dao.commit(databaseConnection);
return query;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return null;
}
/** * 查,带事务操作 * * @param id id值 * @return 查询结果集合 * @throws SQLException SQLException异常 */
public T queryById(Integer id) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
T t = dao.queryForId(id);
dao.commit(databaseConnection);
return t;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return null;
}
/** * 判断表是否存在 * * @return 表是否存在 * @throws SQLException SQLException异常 */
public boolean isTableExists() throws SQLException {
return getDao().isTableExists();
}
/** * 获得记录数 * * @return 记录数 * @throws SQLException SQLException异常 */
public long count() throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
long count = dao.countOf();
dao.commit(databaseConnection);
return count;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
/** * 获得记录数 * * @param preparedQuery PreparedQuery类 * @return 记录数 * @throws SQLException SQLException异常 */
public long count(PreparedQuery<T> preparedQuery) throws SQLException {
Dao<T, Integer> dao = getDao();
DatabaseConnection databaseConnection = null;
try {
databaseConnection = dao.startThreadConnection();
dao.setAutoCommit(databaseConnection, false);
long count = dao.countOf(preparedQuery);
dao.commit(databaseConnection);
return count;
} catch (SQLException e) {
dao.rollBack(databaseConnection);
e.printStackTrace();
} finally {
dao.endThreadConnection(databaseConnection);
}
return 0;
}
}
一个简单的泛型实现类,带缓存。
/** * BaseDao泛型实现类 * User:lizhangqu(513163535@qq.com) * Date:2015-08-26 * Time: 13:51 */
public class BaseDaoImpl<T,Integer> extends BaseDao<T,Integer> {
private Class<T> clazz;
private Map<Class<T>,Dao<T,Integer>> mDaoMap=new HashMap<Class<T>,Dao<T,Integer>>();
//缓存泛型Dao
public BaseDaoImpl(Context context,Class<T> clazz) {
super(context);
this.clazz=clazz;
}
@Override
public Dao<T, Integer> getDao() throws SQLException {
Dao<T,Integer> dao=mDaoMap.get(clazz);
if (null==dao){
dao=mDatabaseHelper.getDao(clazz);
mDaoMap.put(clazz,dao);
}
return dao;
}
}
如果你要增加一些操作,直接继承BaseDao实现抽象方法再加入你要增加的操作,或者直接继承BaseDaoImpl再增加操作即可。
整体代码没有什么难度,而怎么使用呢,这里写了几个测试用例。测试用例中涉及到的实体类就不贴了。
public class ApplicationTest extends ApplicationTestCase<Application> {
private BaseDao<Student,Integer> mStudentDao;
private BaseDao<Course,Integer> mCourseDao;
private BaseDao<StudentCourse,Integer> mStudentCourseDao;
public ApplicationTest() {
super(Application.class);
}
@Override
protected void setUp() throws Exception {
super.setUp();
mStudentDao=new BaseDaoImpl<>(getContext(),Student.class);
mCourseDao=new BaseDaoImpl<>(getContext(),Course.class);
mStudentCourseDao=new BaseDaoImpl<>(getContext(),StudentCourse.class);
}
public void testAddStudent() throws SQLException {
Student student=new Student();
student.setStudentName("张三");
student.setAge(18);
student.setSex(true);
student.setAddress("杭州市");
mStudentDao.save(student);
}
public void testAddOrUpdateStudent() throws SQLException {
Student student=new Student();
student.setStudentName("张三1111");
student.setAge(18);
student.setSex(true);
student.setAddress("杭州市");
Dao.CreateOrUpdateStatus createOrUpdateStatus = mStudentDao.saveOrUpdate(student);
Log.e("TAG", createOrUpdateStatus.isCreated() + " " + createOrUpdateStatus.isUpdated() + " " + createOrUpdateStatus.getNumLinesChanged());
student.setAge(19);
createOrUpdateStatus = mStudentDao.saveOrUpdate(student);
Log.e("TAG", createOrUpdateStatus.isCreated() + " " + createOrUpdateStatus.isUpdated() + " " + createOrUpdateStatus.getNumLinesChanged());
}
public void testAddStudents() throws SQLException {
Student student=new Student();
student.setStudentName("李四");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
Student student1=new Student();
student1.setStudentName("王五");
student1.setAge(21);
student1.setSex(true);
student1.setAddress("嘉兴市");
List<Student> list=new ArrayList<Student>();
list.add(student);
list.add(student1);
mStudentDao.save(list);
}
public void testDeleteStudent() throws SQLException {
Student student=new Student();
student.setStudentName("1111");
student.setAge(11);
student.setSex(true);
student.setAddress("22222");
mStudentDao.save(student);
mStudentDao.delete(student);
}
public void testDeleteStudents() throws SQLException {
Student student=new Student();
student.setStudentName("李四");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
Student student1=new Student();
student1.setStudentName("王五");
student1.setAge(21);
student1.setSex(true);
student1.setAddress("嘉兴市");
List<Student> list=new ArrayList<Student>();
list.add(student);
list.add(student1);
mStudentDao.save(list);
mStudentDao.delete(list);
}
public void testDeleteStudentByColumns() throws SQLException {
Student student=new Student();
student.setStudentName("李四11");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
mStudentDao.save(student);
mStudentDao.delete(new String[]{"studentName","studentAge"},new String[]{"李四11","19"});
}
public void testDeleteStudentById() throws SQLException {
Student student=new Student();
student.setStudentName("李四22");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
mStudentDao.save(student);
mStudentDao.deleteById(student.getId());
}
public void testDeleteStudentByIds() throws SQLException {
Student student=new Student();
student.setStudentName("李四22");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
mStudentDao.save(student);
Student student1=new Student();
student1.setStudentName("李四333");
student1.setAge(19);
student1.setSex(false);
student1.setAddress("温州市");
List<Student> list=new ArrayList<Student>();
mStudentDao.save(list);
mStudentDao.deleteByIds(Arrays.asList(student.getId(),student1.getId()));
}
public void testDeleteStudentByPreparedDelete() throws SQLException {
Student student=new Student();
student.setStudentName("李四33");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
mStudentDao.save(student);
DeleteBuilder<Student, Integer> studentIntegerDeleteBuilder = mStudentDao.getDao().deleteBuilder();
studentIntegerDeleteBuilder.where().eq("studentName","李四33").and().eq("studentAddress", "温州市");
PreparedDelete<Student> prepare = studentIntegerDeleteBuilder.prepare();
mStudentDao.delete(prepare);
}
public void testUpdateStudent() throws SQLException {
Student student=new Student();
student.setStudentName("赵六");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
mStudentDao.save(student);
student.setAddress("临安市");
mStudentDao.update(student);
}
public void testUpdateStudentByPreparedUpdate() throws SQLException {
Student student=new Student();
student.setStudentName("赵六");
student.setAge(19);
student.setSex(false);
student.setAddress("温州市");
mStudentDao.save(student);
student.setAddress("临安市");
UpdateBuilder<Student, Integer> studentIntegerUpdateBuilder = mStudentDao.getDao().updateBuilder();
studentIntegerUpdateBuilder.updateColumnValue("studentName","赵六六").where().eq("studentName", "赵六").and().eq("studentAddress", "温州市");
PreparedUpdate<Student> prepare = studentIntegerUpdateBuilder.prepare();
mStudentDao.update(prepare);
}
public void testQueryStudentAll() throws SQLException {
List<Student> students = mStudentDao.queryAll();
Log.e("TAG", students + "");
}
public void testQueryStudentByPreparedQuery() throws SQLException {
QueryBuilder<Student, Integer> studentIntegerQueryBuilder = mStudentDao.getDao().queryBuilder();
studentIntegerQueryBuilder.where().eq("studentAddress","温州市");
PreparedQuery<Student> prepare = studentIntegerQueryBuilder.prepare();
List<Student> students = mStudentDao.query(prepare);
Log.e("TAG",students+"");
}
public void testQueryStudentByColumn() throws SQLException {
List<Student> students = mStudentDao.query("studentName","赵六六");
Log.e("TAG",students+"");
}
public void testQueryStudentByColumns() throws SQLException {
List<Student> students = mStudentDao.query(new String[]{"studentName","studentAge","studentSex"},new Object[]{"李四",19,false});
Log.e("TAG",students+"");
}
public void testQueryStudentByMap() throws SQLException {
Map<String, Object> map=new HashMap<String, Object>();
map.put("studentName","李四");
map.put("studentAge",19);
map.put("studentSex",false);
List<Student> students = mStudentDao.query(map);
Log.e("TAG",students+"");
}
public void testQueryStudentById() throws SQLException {
Student student = mStudentDao.queryById(1);
Log.e("TAG",student+"");
}
public void testIsTableExists() throws SQLException {
Log.e("TAG",mStudentDao.isTableExists()+"");
}
public void testCount() throws SQLException {
Log.e("TAG",mStudentDao.count()+"");
}
public void testCountByPreparedQuery() throws SQLException {
PreparedQuery<Student> prepare = mStudentDao.getDao().queryBuilder().setCountOf(true).where().eq("studentAddress", "温州市").prepare();
Log.e("TAG",mStudentDao.count(prepare)+"");
}
最后给出源码下载地址