首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Android房间数据库总是以Primarykey 0作为新条目的开头

Android房间数据库总是以Primary key 0作为新条目的开头。在Android中,Room是一个用于访问本地数据库的持久化库,它提供了一种方便的方式来管理应用程序的本地数据。

对于Room数据库来说,每个实体(Entity)都应该有一个主键(Primary Key)。如果我们没有明确为主键字段指定值,Room会自动为其分配一个值。默认情况下,Room将使用0作为主键的默认值。

这种设计决策主要是为了避免与实际数据发生冲突。当我们在插入新条目时,如果未指定主键值,则Room会将0作为默认主键值。这可以确保新插入的数据不会与已有数据冲突。

然而,这也意味着当我们查询数据库时,可能会遇到主键为0的条目。为了正确处理这种情况,我们应该在查询结果时进行判断,以排除主键为0的默认条目。

总结一下,Android房间数据库总是以Primary key 0作为新条目的开头,这是因为Room在插入新数据时会自动为主键字段分配默认值。我们需要在查询结果时注意处理主键为0的默认条目。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Android架构组件Room的使用详解

Room其实就是一个orm,抽象了SQLite的使用,但是它作为Android的亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错的。...Entity(tableName = "tb_class") public class ClassEntity { @PrimaryKey private long id; } 学生表 //指示数据表实体类...TABLE Book " + " ADD COLUMN pub_year INTEGER"); } }; 创建嵌套对象 有时,您希望将一个实体或普通的以前的Java对象(POJO)作为数据库逻辑中的一个完整的整体来表示...然后将所提供的值添加到嵌入对象中每个列名的开头 @Embedded(prefix = "foo_") Coordinates coordinates; 和 LiveData 一起使用 添加依赖 //...)存储在您的版本控制系统中,因为它允许为测试目的创建您的数据库的旧版本 总结 以上所述是小编给大家介绍的Android架构组件Room的使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的

2.2K10
  • Android开发笔记(八十五)手机数据库Realm

    Realm应用背景 Android自带的SQLite数据库,在多数场合能够满足我们的需求,但随着app广泛使用,SQLite也暴露了几个不足之处: 1、开发者编码比较麻烦,而且还要求开发者具备SQL...createObject : 从RealmObject类创建一数据库记录,后面直接使用该类的设置方法即可写入字段值。...beginsWith : 指定字段以什么字符串开头。 endsWith : 指定字段以什么字符串结尾。 返回结果集的运算结果 sum : 对指定字段求和。...= true) { mRealm.close(); } 数据库迁移RealmMigration app升级时可能伴随着数据库升级,对于Realm来说,数据库升级就是迁移操作,把原来的数据库迁移到结构的数据库...点击下载本文用到的Realm数据库操作的工程代码 点此查看Android开发笔记的完整目录

    1.8K20

    一波操作搞定MyCat

    前言 接着上一篇文章:一篇秒懂MyCat 本文以实际操作为主,理论性比较少,主要包含mycat安装,mysql主从复制,mycat垂直分库,mycat水平分表等系列操作,希望对有机会接触到mycat的朋友一些启发...export PATH=${MYCAT_HOME}/bin:${PATH} ## 最后: source /etc/profile ## 使环境变量生效 垂直分库 1、分析数据表与业务之间的关系 首先对项目的业务需求要十分清晰...那么如何将原来的数据同步到另外一个数据库呢,这就是接下来要说的mysql主从复制。...如果从数据库名和主数据库名不一样的话,可以考虑在从数据库中运行: change replication filter replicate_rewrite_db=((主数据库名,从数据库名)) 2.6、启动...Slave_SQL_Running: Yes 启动失败,如果是以下错误: Last_IO_Error: Fatal error: The slave I/O thread stops because

    98420

    开源 | 携程机票跨端 Kotlin DSL 数据库框架 SQLlin

    例如,在 Android 开发中,我们有 Android Framework SQLite Java API,但是开发者们通常会在项目中使用 Jetpack Room 来操作数据库。...例如:查询操作与按条件的更新和删除操作,用户仍然需要编写 SQL 语句,这些 SQL 语句虽然 Android Studio 提供了高亮,但是仍然是以字符串的形式存在,不受编译器静态类型检查。...如果你准备从 0 打造一个 KMM app 或者你是某项目的基础架构团队的成员,我非常建议你尝试 SQLDelight。...三、 基本设计与实现 3.1 架构设计与 module 划分 在一个项目开发之前,我们首先需要做的是将项目的基本功能理清,然后进行适当的 module 划分: 无论是 iOS 还是 Android,最底层调用的都是...3.3.3 使用 Kotlin Symbol Processor 实现表与列元素生成 在 3.3.1 小节的基本设计中,Table 实例是通过构造函数创建的,每次创建时用户都需要手动传入数据库的真实表名作为其参数

    1.6K40

    上手使用 Room Kotlin API

    Room 是 SQLite 的封装,它使 Android数据库的操作变得非常简单,也是迄今为止我最喜欢的 Jetpack 库。...developer.android.google.cn/codelabs/android-room-with-a-view-kotlin#0 定义数据库表 在我们的数据库中仅有一个表,就是保存词汇的表。...Word 类代表表中的一记录,并且它需要使用注解 @Entity。我们使用 @PrimaryKey 注解为表定义主键。然后,Room 会生成一个 SQLite 表,表名和类名相同。...要创建数据库,我们需要创建一个抽象类,它继承自 RoomDatabase,并且添加 @Database 注解。将 Word 作为需要存储的实体元素传入,数值 1 作为数据库版本。...://developer.android.google.cn/codelabs/android-room-with-a-view-kotlin#0 ----

    1.5K10

    学习|Android JetPack组件---ORM框架Room的使用

    Room 包含 3 个主要组件: 数据库:包含数据库持有者,并作为应用已保留的持久关系型数据的底层连接的主要接入点。...在注释中添加与数据库关联的实体列表。 包含具有 0 个参数且返回使用 @Dao 注释的类的抽象方法。...运行后可以看到,我们创建的5信息也已经显示了出来,创建成功的数据库在虚拟机下data/data/程序包/database/下的三个文件 ?...使用过程中,经常会遇到数据库升级的问题,在Room中使本地SQLITE库数据库升级可以用Migration方式,我们直接做一个的类,对数据进行操作,也直接在原数据库上升级。...数据库版本升级要执行的语句我们新建了一个Migration,后面的参数是两个INT,分别是旧的版本号和的版本号 ?

    1.1K20

    Android Room 持久化库

    Room 有三个重要组件 Database Entity DAO Database 包含数据库持有者,并作为与应用持久关联数据的底层连接的主要接入点。...使用@Database注解,并满足以下条件 是抽象类,并且继承自RoomDatabase 在注解中包含与数据库关联的实体列表。 包含一个具有0个参数的抽象方法,并返回用@Dao注解的类。...原文 https://developer.android.com/training/data-storage/room/migrating-db-versions.html 在APP升级时可能需要更改数据库来策应的功能...测试数据库有两种方法 在Android 设备上 在开发主机上(不推荐) 关于测试指定数据库升级的信息 上面已经说过了。 注意:在测试时,Room允许创建Dao的模拟实例。...这样的话,如果不是测试数据库本身就不需要创建完整的数据库,这个功能是很好的,Dao不会泄露数据库的任何信息 在设备上测试 测试数据库实现的推荐方法是编写在Android设备上运行的JUnit测试,由于这些测试不需要创建活动

    4K70

    ORM中的继承关系映射全解——单表继承体系、一实体一具体表、一实体一扩展表、接口映射

    单表继承体系 所谓单表继承体系就是用一张数据库表存储整个继承体系中的所有实体的数据。单表继承体系适合那种继承体系中实体数目相对较少,记录数相对较少,子类对父类的属性扩展也相对较少的情形。 ...GroupID { get; set; }        } 这里我们实际要持久化的是两个实体CommonMessage和SpecialMessage,他们有一个共同的抽象父类Message,父类作为一个抽象类不会被直接使用...一实体一具体表方案的优点主要就是查询性能好,读操作只需操作一张表,和实体数据的对应结构清晰,数据库表迁移和维护会比较方便;主要的缺点是数据冗余较大,因为每次插入一子类数据时,同时要插入一份子类包含的父类字段的数据到所有父类层次表中...同时,当插入或更新一Child数据时,必须同时保存对应的Parent和AnotherParent类的记录。...我们还是以代码来说明:         [Table("ParentTable")] public interface Parent : IEntity        {            [PrimaryKey

    2.4K90

    Android开发笔记(一百七十五)利用Room简化数据库操作

    虽然Android提供了数据库帮助器,但是开发者在进行数据库编程时仍有诸多不便,比如每次增加一张表,开发者都得手工实现以下代码逻辑: 1、重写数据库帮助器的onCreate方法,添加该表的建表语句;...由于Room并未集成到SDK中,而是作为第三方框架提供,因此首先要修改模块的build.gradle文件,往dependencies节点添加下面两行配置,表示导入指定版本的Room库: implementation...BookDao bookDao(); } 四、在自定义的Application类中声明书籍数据库的唯一实例 为了避免重复打开数据库造成的内存泄漏问题,每个数据库在App运行过程中理应只有一个实例,此时要求开发者自定义的...(发生数据库变更时,Room默认删除原数据库再创建数据库) .allowMainThreadQueries() // 允许在主线程中操作数据库(Room默认不能在主线程中操作数据库...点此查看Android开发笔记的完整目录

    94210

    Android数据库Realm实践

    Android开发中常用的数据库有5个: 1. OrmLite OrmLite 不是 Android 平台专用的ORM框架,它是Java ORM。支持JDBC连接,Spring以及Android平台。...GreenDAO 当性能很重要时(数据访问频繁),GreenDao是一个很快的解决方案,它能够支持数千记录的CRUD每秒,和OrmLite相比,GreenDAO要快几乎4.5倍。...在你的项目中包含Active Android,你需要在项目的 /libs 目录下添加一个jar文件。可以从Github中获取源代码并使用Maven进行编辑。 5. ...快速入门: 运行环境 目前我们还不支持 Android 以外的 Java 环境; Android Studio >= 1.5.1 ; 较Android SDK 版本; JDK 版本 >=7; 我们支持...构建依赖关系 第一步: 在项目的 build.gradle 文件中添加如下 class path 依赖。

    1.4K90

    Core Data 是如何在 SQLite 中保存数据的

    实体对应的表 下图为使用 Xcode Core Data 模板创建的项目的数据库结构(仅定义了一个实体 Item,且 Item 只有一个属性 timestamp ),其中实体 Item 在 SQLite...0 表示该实体没有父实体。下图展示了当 Item 为抽象实体,ItemSub 为它的子实体时 Z_SUPER 的情况。...在创建的实体数据时,Core Data 将从 Z_PRIMARYKEY 表中找到对应实体最后使用的 Z_PK 值( Z_MAX ),在此值基础上加一,作为记录的 Z_PK 值,并更新该实体对应的 Z_MAX...在数据库中创建关系的规则为: 一对多 “一”的一侧不创建的字段,在“多”的一侧为关系创建的字段,该字段对应“一”的 Z_PK 值。...总结 撰写本文的主要目的是对我近段时间来的零散研究进行汇总,方便日后查询。

    1.6K20

    你还在用 MyBatis 吗,Ktorm 了解一下?

    Google 宣布 Kotlin 成为 Android 的官方语言,Kotlin 可以说是突然火了一波。其实不仅仅是 Android,在服务端开发的领域,Kotlin 也可以说是优势明显。...MyBatis 作为一个 Java 的 SQL 映射框架,虽然在国内使用人数众多,但是也受到了许多吐槽。...,自动生成一 SQL select*fromt_employee,查询表中所有的员工记录,然后打印出他们的名字。...,使用该 lambda 的返回值作为条件,生成一查询 SQL,自动 left jion 了关联表 t_department。...中间操作 这类操作并不会执行序列中的查询,而是修改并创建一个的序列对象,比如 filter 函数会使用指定的筛选条件创建一个的序列对象。

    2.2K30

    【iOS】基于Realm数据库的记账软件--Realm数据库(一)

    money Double 账户余额 账本表:Book 字段 类型 说明 bookID NSString 账本ID,主键 name NSString 账本名 以上,就是该项目的所有数据库表...2.2、特点 Realm有如下特点: 跨平台:现在绝大多数的应用开发并不仅仅只在iOS平台上进行开发,还要兼顾到 Android平台的开发。...为两个平台设计不同的数据库是愚蠢的,而使用 Realm 数据库, iOS和Android 无需考虑内部数据的架构,调用Realm提供的API 就可以完成数据的交换,实现“一个数据库,两个平台无缝衔接 ”...*config = [RLMRealmConfiguration defaultConfiguration]; // 设置的架构版本。...Realm 会自行检测新增和需要移除的属性,然后自动更新硬盘上的数据库架构 } }; // 告诉 Realm 为默认的 Realm 数据库使用这个的配置对象 [RLMRealmConfiguration

    1.4K20

    C++项目:在线五子棋对战(网页版)

    服务器流程图: 模块解析 在项目中,需要用到6个模块,分别是: 数据管理模块:基于mysql数据库进行数据管理以及封装数据管理模块实现数据库访问。...MySQLClient库 JsonCpp 模块开发 数据库代码 数据库设计这边,玩家的信息包含了玩家的用户id、用户名、用户密码、天梯分数、排位场次和胜场场次。...其中,用户id作为主键,并且是自增长的,而用户名和用户密码不能为空,且用户名唯一。...uid时,而由于是使用unordered_map作为容器,因此与之对应的通信连接conn就会失去一个映射关系,而通信连接使用了uinque_ptr进行管理,计数器直接减为0,这个通信连接就会自动销毁。...做的时候遇到过什么问题,当时是怎么想的,最后是怎么解决的 在做项目的过程中,遇到了不少的技术问题。

    68740

    MyCat - 使用篇(1)

    请求情况2: select * from orders where id 0; 对于分片表的查询,如果按照分片列范围(在字段类型支持范围的情况下)查询,则请求会根据分片规则计算两个边界值...表分组(Table Group)是解决跨分片数据join的一种很好的思路,也是数据切分规划的重要一规则。...数据冗余是解决跨分片数据join的一种很好的思路,也是数据切分规划的另外一重要规则 比如: <table name="order_status_interception" primaryKey="...这是以order_id与orders的id进行join结果就是对的)join结果也是正确的。 ?...作为快递员的子表也有同样的缺陷。 还有一种方法,就是这种关系表同时作为运单和快递员的子表。但是这样,目前需要应用自己去做双写。MyCat目前还没实现这种。

    70020
    领券