Android/ORMLite插入带ID的行

Joe*_*e M 7 java database sqlite android ormlite

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

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

谢谢!

Gra*_*ray 14

@Femi是正确的,对象可以是generate-id id,但不能同时是两者.问题不仅仅是ORMLite如何存储对象,还必须与生成数据库的模式相匹配.

ORMLite支持允许此行为的注释allowGeneratedIdInsert=true选项@DatabaseField.某些数据库类型(例如Derby)不支持此功能,但在Android/SQLite下运行.

对于后代,您还可以创建共享同一个表的两个对象 - 一个具有生成ID而另一个没有.然后你可以使用generated-id Dao来获取该行为,并使用其他Dao来获取调用者设置的id值.这是另一个回答这个问题的答案.你的问题听起来像是会产生很多额外的DAO.

唯一的其他解决方案是将id用于您的目的.让数据库生成id,然后使用您在外部为您的目的设置的其他字段.在某些情况下强制数据库id似乎是一个糟糕的模式.