数据库框架 GreenDao
https://www.jianshu.com/p/853401a7d02b
坑:
1、主键要使用Long类型,不要使用long类型,因为long一定不是null,而Long可以是null;
如果使用long,那么实体类构造时,主键会自动是0,而不是null,这时插入会因为主键不唯一报错;
如果使用Long,这时主键是null,而且表的主键是自增的,所以不会报错;
2、QueryBuilder的使用
//插入新的Message public void InsertMessage(MessageBean messageBean){ QueryBuilder queryBuilder = mDaoSession.getMessageBeanDao().queryBuilder(); //先删除原来的数据 List<MessageBean> messageBeanList = queryBuilder.where(MessageBeanDao.Properties.User_id.eq(messageBean.getUser_id()),MessageBeanDao.Properties.Orther_user_id.eq(messageBean.getOrther_user_id())).list(); for(MessageBean temp_message:messageBeanList){ mDaoSession.getMessageBeanDao().deleteByKey(temp_message.getId()); } //插入新数据 mDaoSession.getMessageBeanDao().insert(messageBean); }
//查询Message序列 public List<MessageBean> GetMessage(long message_id){ //根据message_id取出最新的20条数据 QueryBuilder queryBuilder = mDaoSession.getMessageBeanDao().queryBuilder(); List<MessageBean> messageBeanList = new ArrayList<>(); if(message_id < 0){ //直接取当前最新的20条数据 messageBeanList = queryBuilder.orderDesc(MessageBeanDao.Properties.Id).limit(20).list(); } else{ messageBeanList = queryBuilder.where(MessageBeanDao.Properties.Id.lt(message_id)).orderDesc(MessageBeanDao.Properties.Id).limit(20).list(); } return messageBeanList; }