java - Android/ORMLite 插入带 ID 的行

标签 java android database sqlite ormlite

我目前正在使用 ORMLite 来处理 Android 上的 SQLite 数据库。作为其中的一部分,我正在从后端服务器下载一堆数据,我希望将这些数据以与后端服务器上完全相同的格式添加到 SQLite 数据库中(即 ID 相同等) .

所以,我的问题是,如果我通过 setId() 填充我的数据库条目对象(我们称之为设备),包括设备的 generatedId/主键字段,然后我用它运行 DAO.create()设备入口那个ID会被正确保存吗?我以这种方式尝试过,但在我看来并非如此。如果是这种情况,我会再试一次并寻找其他问题,但在前几次通过代码时我找不到问题。所以本质上,如果我在一个设置了 ID 的数据库对象上调用 DAO.create(),该 ID 会被发送到数据库吗?如果没有,我如何插入一个主键值已经填写好的行?

谢谢!

最佳答案

@Femi 是正确的,对象可以是生成的 ID ID,但不能两者都是。问题不仅仅是 ORMLite 如何存储对象,它还必须与生成数据库的模式相匹配。

ORMLite支持 @DatabaseField 注释的 allowGeneratedIdInsert=true 选项允许此行为。这不受某些数据库类型(例如 Derby)支持,但可以在 Android/SQLite 下使用。

为了后代,您还可以创建 2 个共享同一个表的对象——一个具有生成 ID,另一个没有。然后,您可以使用生成的 id Dao 插入以获取该行为,并使用另一个 Dao 获取调用者设置的 id 值。这是 another answer talking about that .你的问题听起来像是这会创建很多额外的 DAO。

唯一的其他解决方案是将 id 用于您的目的。让数据库生成 id,然后有一个您使用的额外字段,该字段是为您的目的而在外部设置的。在我看来,在某些情况下强制使用数据库 ID 是一种糟糕的模式。

关于java - Android/ORMLite 插入带 ID 的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7073923/

相关文章:

android - E/广告 : Fail to get isAdIdFakeForDebugLogging with error code 3

java - 是否可以对 HEX 进行签名?

java - 在解决依赖项之前运行测试

java - 重新部署时是否仍然无法摆脱 PermgenSpace 异常?

java - 如何在 Android 应用程序中为金融交易生成最多 10 个字符的唯一引用 ID?

database - 使用 NHibernate 设置正确的事务隔离模式,如何?

database - 在运行时设置 Crystal Report 数据源

Java8 : Why a lambda expression could do a logical and(or) with boolean

android - 如何使用 VPNService 阻止应用程序网络请求?

mysql - 如何在 MySQL 中创建关系表?