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

为什么Android Room不在我创建对象的时候就给我自动生成的id添加内容?

Android Room是Android提供的一个持久性库,用于管理应用程序的本地数据库。它提供了一个对象关系映射(ORM)层,允许开发人员使用对象来表示数据库表和查询结果。

在使用Android Room时,你可以定义实体(Entity)类来映射数据库表。通常情况下,每个实体都需要一个主键来唯一标识该实体。对于自动生成的id,Android Room提供了两种方式:自增(AUTOINCREMENT)和非自增(PRIMARY KEY)。

自增(AUTOINCREMENT)方式是指在插入新的实体时,自动为id字段生成唯一的值。这样,你无需手动为id字段添加内容,系统会自动处理。

然而,使用自增方式也会有一些性能上的损耗,因为每次插入新的实体时,系统都需要计算出一个唯一的id值。所以,如果你的实体没有特殊的要求,可以考虑使用非自增(PRIMARY KEY)方式,此时你需要手动为id字段添加内容。

通过在实体类中的id字段上添加注解,你可以指定id的生成方式。例如,使用自增方式:

代码语言:txt
复制
@Entity
public class MyEntity {
    @PrimaryKey(autoGenerate = true)
    private int id;
    // other fields and methods
}

使用非自增方式:

代码语言:txt
复制
@Entity
public class MyEntity {
    @PrimaryKey
    private int id;
    // other fields and methods
}

总之,Android Room不在创建对象时自动生成id的原因是为了给开发人员更多的灵活性和选择。根据实际需求,你可以选择自动生成id或手动为id字段添加内容。

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

相关·内容

时候更新手里武器了—Jetpack架构组件简析

3)生成绑定类 刚才我们获取绑定布局是通过DataBindingUtil.setContentView方法生成ActivityMainBinding对象并绑定布局。...只要你布局用layout属性包围,编译后就会自动生成绑定类,类名称基于布局文件名称,它会转换为 Pascal 大小写形式并在末尾添加 Binding 后缀。...很常见一点就是可以减少内存泄漏和崩溃情况了呀,想想以前你项目中针对网络接口返回数据时候都要判断当前界面是否销毁,现在LiveData帮你解决了这个问题。 具体为什么能解决崩溃和泄漏问题呢?...Room是通过接口方法注解生成sql语句,也就是编译成字节码时候生成了sql语句,所以运行起来较快。...按需载入部分数据会减少网络带宽和系统资源使用量。 ” 所以Paging就是一个分页库,主要用于Recycleview列表展示。下面结合Room说说Paging用法。

2.9K20

Android架构组件Room使用详解

Room其实就是一个orm,抽象了SQLite使用,但是它作为Android亲儿子orm,并且原生支持LiveData和Rxjava嵌套使用,学习一下还是不错。...repositories { jcenter() google() } } 添加依赖 dependencies { // Room implementation "android.arch.persistence.room...有时,您希望将一个实体或普通以前Java对象(POJO)作为数据库逻辑中一个完整整体来表示,即使该对象包含几个字段。...然后将所提供添加到嵌入对象中每个列名开头 @Embedded(prefix = "foo_") Coordinates coordinates; 和 LiveData 一起使用 添加依赖 //...总结 以上所述是小编给大家介绍Android架构组件Room使用详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家

2.2K10
  • Android Room 持久化库

    定义操作方法 这里只列出几个常用方法 Insert 当创建一个DAO方法并使用它时候Room生成实现并在单个事物中将所有参数插入。...例如只查询某些地区用户。 当参数是一个集合时候Room 会在运行时候自动扩展它。...要实现这一点,可以在查询方法使用 LiveData 类行返回值。当数据更新时 Room自动生成所需代码已更新LiveData。...要使用此功能,需要将 Room 组中 android.arch.persistence.room:rxjava2 组件添加到构建Gradle依赖项中,添加组件之后就可以返回 Rxjava2 中对象...这里会解释为什么不支持对象引用和怎么使用类型转换器。 使用类型转换器 有时候你想存储自定义数据类型在数据库单个列中。

    4K70

    每个人都要学图片压缩终极奥义,有效解决 Android 程序 OOM

    由来 ---- 在我们编写 Android 程序时候,几乎永远逃避不了图片压缩难题。...这里卖个关子,大家可以在评论区中发表自己想法 生成目标图片 ---- 经过前面的两个步骤,想必大家已经能勾勒处这最后一步做法了,思路非常简单: 先生成一个 Options对象 将 Options...下面将针对这个问题进行更有效地解决 ,有兴趣可以继续关注 _yuanhao 编程世界 相关文章 ---- Android 让你 Room 搭上 RxJava 顺风车 从重复代码中解脱出来 ViewModel...和 ViewModelProvider.Factory:ViewModel 创建者 单例模式-全局可用 context 对象,这一篇够了 缩放手势 ScaleGestureDetector 源码解析...,跪搓衣板 Android 自定义时钟控件 时针、分针、秒针绘制这一篇够了 android 自定义控件之-绘制钟表盘 请点赞!

    40820

    AndroidRoom数据库(介绍)

    Room是什么? Room是一个持久性数据库。 Room持久性库提供了SQLite抽象层,以便在充分利用SQLite同时允许流畅数据库访问。 为什么会选择Room?...前面也说到了现在也有不少开源数据库给大家使用,那为什么我们还要去学习使用这个库呢?当然不是前面说“正不正统”原因了。...1、在app/build.gradle中添加以下依赖 implementation 'android.arch.persistence.room:runtime:1.0.0' annotationProcessor...'android.arch.persistence.room:compiler:1.0.0' 你可以点击这里查看最新依赖版本号 2、创建JavaBean @Entity public class User...、数据库版本(每当我们改变数据库中内容时它都会增加),所以这里使用exportSchema = false 注意:除了添加表映射类以及和数据库版本外,还要添加exportSchema = false

    1.1K50

    【翻译】Realm , ObjectBox ,还是 Room ,哪个适合你?

    Realm 自从它理念发布( 2011 年左右,原名 “ TightDB ”)以来 Realm 自然而然地成为了许多开发者开发首选。为什么呢?你会这么问。...当然,至少在写这篇文章时候是这样(或许在很长一段时间之后也是这样), Room 是城里最受欢迎那个孩子,但是将会尽量保持对他做一个简短介绍。...这个注解定义了一系列实体,以及类相关内容——数据中一系列数据访问对象( 一些 DAO )。同时它也是底层数据连接访问枢纽。...查询生成器:使用 ObjectBox 查询对象和编译时错误检查都非常简单。 数据关联:对象引用/关联是内建内部类型,它们都属于原生本地引用。...var notesBox = boxStore.boxFor(Note::class.java) 一个很重要细节是:这些盒子类型都是自动生成,这意味着你所需要担心事情变得更少。

    3.8K30

    Android 让你 Room 搭上 RxJava 顺风车 从重复代码中解脱出来

    于是,Room 也就应运而生了 它通过注解处理器形式,将繁琐无趣代码封装起来,我们只需要添加一个简单注解,就可以完成一系列复杂功能!...表搭建 Room 作为一个 Android 数据库操作注解集合,最基本操作就是对我们数据库进行。...所以我们就有了这个被 @Ignore 构造方法,用于创建不被自动存入数据库临时对象,等到我们想将这个对象存入数据库时,调用User(String id, String userName) 即可。...数据 * * 判断是否为空,若为空则创建新 User 进行存储 * 若不为空,说明该 User 存在,这获得其主键 'getId()' 和传入新 Name 拼接,生成新...好了,至此所有准备工作都已经完成,让我们开始视图层 UserActivity 调用 由于 UserActivity 内容较多就不贴完整代码,我们逐步进行讲解 ---- 准备数据成员 首先我们准备了所需给类数据成员

    1.2K20

    Android Room数据库使用

    Room其实和Retrofit差不多,Room在开发阶段通过注解方式标记相关功能,编译时自动生成响应impl实现类。...一、添加依赖   首先创建一个Android项目,命名为RoomDemo,AS是4.2.1。 然后打开app下build.gradle。...假设一个表中有30个字段,实际上用到只有5个,那么另外25个就不需要进行创建了,则使用@Ignore注解进行忽略。...param user 根据用户进行删除 */ @Delete void delete(User user); } UserDao是一个接口,主要是定义了一些方法,通过注解在编译时候生成实现类...可以查看到,MyDatabase和UserDao实现类都自动生成了。 三、表操作   表操作无非就是那么几个,增删改查,但是为了更直观显示结果,需要对UI做一些改动。

    1.2K30

    Android Room数据库使用

    前言   Room数据库是GoogleJitPack组件中一个,推出已经有一段时间了,现在使用者也越来越多,Room是一个轻量级ORM(Object Relational Mapping:对象关系映射...Room其实和Retrofit差不多,Room在开发阶段通过注解方式标记相关功能,编译时自动生成响应impl实现类。...一、添加依赖   首先创建一个Android项目,命名为RoomDemo,AS是4.2.1。 然后打开app下build.gradle。...假设一个表中有30个字段,实际上用到只有5个,那么另外25个就不需要进行创建了,则使用@Ignore注解进行忽略。...可以查看到,MyDatabase和UserDao实现类都自动生成了。 三、表操作   表操作无非就是那么几个,增删改查,但是为了更直观显示结果,需要对UI做一些改动。

    70920

    玩转LayoutInflater

    我们知道气球打气筒可以给气球打气从而改变它形状。而布局打气筒作用就是给我 Xml 布局打气让它变成一个个 View 对象。...,只是 Android 给我们做了一下封装。...root 中 注意:此时 Xml 布局生成根 View 已经被添加到其他 View 中,注意避免重复添加而报错 如果传入 root 为 null ,此时会将 Xml 布局生成根 View 对象直接返回...看到这里你应该也明白了:Activity 中布局根 View 布局属性之所以能生效,是因为 Android自动在布局文件最外层再嵌套一个FrameLayout 总结 本篇文章重点内容: LayoutInflater...,此时会将 Xml 布局生成根 View 对象直接返回 Activity 中布局根 View 布局属性会生效是因为 Android自动在布局文件最外层再嵌套一个 FrameLayout 好了

    47940

    Android Architecture Components Part1:Room

    所以对于AAC它提供了更好使用灵活性,方便我们集成到我们App中。 今天主要是对AAC其中Room组件进行分析。Room是一个稳健SQL对象映射库,用来帮助我们快速实现数据本地存储。...至于为何要使用本地数据库,自然是当用户无网络或者网络差时候,能够更好提高用户对我们App体验。 添加依赖 在使用Room之前,我们还是要在项目中对其进行依赖添加。..."android.arch.persistence.room:testing:$room_version" 11} Room 上面的依赖添加完成后,接下来我们可以正式使用Room。...其次()中内容就是正常查询语句。...至于它具体方法实现也可以通过build来查看对应自动生成文件ContactsDataBase_Impl类。

    79520

    上手使用 Room Kotlin API

    Room 是 SQLite 封装,它使 Android 对数据库操作变得非常简单,也是迄今为止最喜欢 Jetpack 库。...这里我们会创建一个存储在数据库词汇表,然后将它们显示到屏幕上,同时用户还可以向列表中添加单词。...我们还会定义一个抽象方法,该方法返回一个 WordDao 对象。所有这些都是抽象类型,因为 Room 会帮我们生成所有的实现代码。就像这里,有很多逻辑代码无需我们亲自实现。 最后一步就是构建数据库。...当实现 Dao 测试时候,在每个测试运行之前,我们创建数据库。当每个测试运行后,我们关闭数据库。由于我们并不需要在设备上存储数据,当创建数据库时候,我们可以使用内存数据库。...、创建数据库视图、预填充数据库以及当数据库被创建或打开时候触发特定动作。

    1.6K10

    Java Web基础入门

    版本 dependencies是唯一会改变和增加内容地方,当需要第三方库时候添加添加规则就是groupId:artifactId:version, 正好和我们创建项目的时候声明标签一样 修改...在Javascript去读Ajax结果变成了一个JSON对象了。其他,比如Android,读取出来还是一个字符串,需要手动反序列化成我们想要类。...DataSource 这个对象是springboot自动创建,通过扫描配置类里配置,当检测到有配置datasource时候创建这个bean。于是,在这里就可以注入了,即我们配置那几个属性。...关于Java类型和SQL数据库表映射规则,请查阅官网。 ---- 插入一条数据并返回主键 我们新建表RoomTable是有ID,我们创建了一个Room后要知道生成id,来返回给前端。...service, @Autowired是spring容器里自动注入注解,作用是帮忙生成一定对象,并赋值给它。

    2.4K70

    上手指南 | Jetpack Hilt 依赖注入框架

    这些组件会自动集成到 Android 程序中生命周期中。在使用时候可以指定使用范围,事情作用在对应生命周期当中。...---- Hilt 中组件生命周期 Hilt 会根据相应 Android 类生命周期自动创建和销毁组件实例,对应关系如下: Hilt 提供组件 创建对应生命周期 结束对应生命周期 作用范围...使用 @Module 在注解普通类,在其中创建第三方依赖对象即可。 @Module 模块用于向 Hilt 添加绑定,告诉 Hilt 如果提供不同类型实例。...undefined Hilt 好处 降低 Android 开发者使用依赖注入框架上手成本 内部有一套标准组件和作用域,对范围进行声明后,只能使用在指定作用域中使用这个类,并且提供声明周期管理,会自动释放不在使用对象...使用起来简单,告别繁琐 new。。。 这种流程,只需要添加注解即可。提高了代码可读性,构建简单,耦合变低,容易测试 感觉最大好处就是管理他们生命周期,只能在对应范围内进行使用。

    1.6K30

    Jetpack Hilt 依赖注入框架上手指南

    可以说 Hilt 是专门为 Andorid 打造。 Hilt 创建了一组标准 组件和作用域。这些组件会自动集成到 Android 程序中生命周期中。...Hilt 中组件生命周期 Hilt 会根据相应 Android 类生命周期自动创建和销毁组件实例,对应关系如下: Hilt 提供组件 创建对应生命周期 结束对应生命周期 作用范围 ApplicationComponent...使用 @Module 在注解普通类,在其中创建第三方依赖对象即可。 @Module 模块用于向 Hilt 添加绑定,告诉 Hilt 如果提供不同类型实例。...Hilt 好处 降低 Android 开发者使用依赖注入框架上手成本 内部有一套标准组件和作用域,对范围进行声明后,只能使用在指定作用域中使用这个类,并且提供声明周期管理,会自动释放不在使用对象...使用起来简单,告别繁琐 new。。。这种流程,只需要添加注解即可。提高了代码可读性,构建简单,耦合变低,容易测试 感觉最大好处就是管理他们生命周期,只能在对应范围内进行使用。感觉非常好。

    1.5K20
    领券