• Android数据库操作Greendao主键设置


    概述

    在使用Greendao操作数据库时,对于主键的定义不是很明确,正常我们在使用数据库时会有大概三种情况下的主键定义

    ID主键

    如题,就是使用id值作为主键,这个也是greendao内部默认的

    @Id(autoincrement = true)
    private Long id;
    
    • 1
    • 2

    这里有个坑,一定要提醒一下,掉进去的人还挺多。
    就是在定义id的数据类型时,一定要使用Long类型,而不能使用long简单类型。

    完整代码

    @Entity(nameInDb = "tb_note") // greendao解析注解,描述中指定表名称
    public class NoteEntity implements Serializable {
        private static final long serialVersionUID = 6049457346549266619L;
        @Id(autoincrement = true)
        private Long id;
        private String note_desc;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    唯一值主键

    这个貌似有点费话,其实是说我们需要一个主键,但不是id,主键本身都是唯一的。

    直接上实例了,通过唯一索引的形式定义主键

    @Index(unique = true) // 定义唯一约束索引,当作主键使用
    private String note_no;
    
    • 1
    • 2

    完整代码

    @Entity(nameInDb = "tb_note") // greendao解析注解,描述中指定表名称
    public class NoteEntity implements Serializable {
        private static final long serialVersionUID = 6049457346549266619L;
        @Id(autoincrement = true) // 始终保留一个自增长字段当作默认主键
        private Long id;
        @Index(unique = true) // 定义唯一约束索引,当作主键使用
        private String note_no;
        private String note_desc;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    复合主键

    这个在我们使用关系型数据库时使用的并不少,但在greendao里面却没有这样的安排,没搞懂为什么,那就只能自己想办法解决了

    基本思想和上面一样,所以借助indexesunique唯一索引来当作复合主键

    建议还是要定义一个自增长的主键id,只是使用时不去管它,如果需要则传入null值即可。毕竟greendao内部源码里很多还是依托于这个id主键的。

    另外就是,插入数据时使用insertOrReplace()方法即可,如果定义的复合主键存在则会替换原有数据。

    @Entity(nameInDb = "tb_todo", indexes = {
            @Index(value = "todo_no ASC, todo_ser ASC", unique = true) // 定义组合主键
    })
    public class ToDoEntity implements Serializable {
        private static final long serialVersionUID = 808736119697275862L;
        @Id(autoincrement = true) // 始终保留一个自增长字段当作默认主键
        private Long id;
        private String todo_no;
        private Integer todo_ser;
        private String todo_desc;
        private Integer todo_status;
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
  • 相关阅读:
    训练和测试的loss不下降,并且精度超低
    erp仓库管理系统
    ssh远程连接不了虚拟机ubuntu
    自制OS1-1到2-11==BIOS MBR loader
    HCIA-datacom 4.3 实验三:网络地址转换配置实验
    MMRazor理解
    二叉树的前序遍历
    代码随想录 Day27 贪心02中 LeetCode T55跳跃游戏
    蓝桥杯国赛 小数第n位(数论)
    docker 命令
  • 原文地址:https://blog.csdn.net/ymtianyu/article/details/127925628