数据库框架踩坑记录

GreenDao

  1. 缓存机制,导致更新记录后查询不到真实数据
    问题:更新记录后,数据库中的数据已经更新,但缓存中的数据没有更新,再次查询时直接返回缓存中的数据,导致查询结果不正确。
    解决:清除缓存 DaoSesion.clear() ,会清除所有表的缓存(那么缓存机制意义何在?)
  2. 主键(id)类型必须为包装类
    问题:将主键id设置类型设置为long类型时,不设置id会插入失败
@Entity
public class Student {

    @Id(autoincrement = true)
    private long id;
    private String name;
    private int age;
//在插入第一条数据时,id默认为0,插入成功,继续插入时表中存在id为0的数据,插入失败报错
 Student student = new Student();
 student.setName("张三");
 dao.insert(student);

//手动设置主键id,插入成功
 Student student = new Student();
 student.setId(1);
 student.setName("张三");
 dao.insert(student);

解决:主键id必须为包装类Long

@Entity
public class Student {

    @Id(autoincrement = true)
    private Long id;
    private String name;
    private int age;
//id为包装类时,主键自增才会生效,且主键是从1开始,不是从0开始
 Student student = new Student();
 student.setName("张三");
 dao.insert(student);
  1. 改变数据表中的字段或增加新表会导致数据库被清空

LitePal

  1. 批量插入比循环单条插入速度慢很多
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 1. 简介 1.1 什么是 MyBatis ? MyBatis 是支持定制化 SQL、存储过程以及高级映射的优秀的...
    笨鸟慢飞阅读 5,622评论 0 4
  • 转 # https://www.cnblogs.com/easypass/archive/2010/12/ 08/...
    吕品㗊阅读 9,797评论 0 44
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,142评论 1 32
  • 一本好看的小说会让你回味无穷,一杯飘香的摩卡会让你更热爱生活,一个深刻心底的人会让你懂得如何去爱。 二十岁是一个花...
    打完豆豆好碎觉阅读 258评论 0 1
  • 段智耀阅读 163评论 0 0