前面的一篇文章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)+"");    }

最后给出源码下载地址

  • http://download.csdn.net/detail/sbsujjbcy/9053725

更多相关文章

  1. Android(安卓)- 分享内容 - 添加一个简单的分享操作
  2. android中sqlite操作
  3. android sqlite db-journal文件产生原因及说明
  4. android类库常用类型解析:
  5. android 修改host 文件
  6. Android的异步加载
  7. 我的android 第23天 - UriMatcher类使用介绍
  8. 说说 Android(安卓)中如何操作音频与视频文件
  9. Android(安卓)uiautomator实例使用

随机推荐

  1. (三)Android官方MVVM框架实现组件化之Dat
  2. Android之ViewFlipper的用法
  3. Android(安卓)HandlerThread详解
  4. 项目笔记
  5. 实战android打包和签名
  6. 【Android】[Problem]-"Waiting for targ
  7. android输入法状态控制
  8. Android Vold架构
  9. android4.0.3 wifi 启动流程(一)
  10. android中对json数据的解析,并在listview