Android / ORMLite插入带ID的行

时间:2011-08-16 05:23:36

标签: java android database sqlite ormlite

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

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

谢谢!

2 个答案:

答案 0 :(得分:14)

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

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

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

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

答案 1 :(得分:4)

来自http://ormlite.com/docs/generated-id

  

Boolean该字段是否为自动生成的id字段。默认值为false。只有一个字段可以在类中设置此集合。这告诉数据库为插入的每一行自动生成相应的id。当使用Dao.create()方法创建具有generated-id的对象时,数据库将为该行生成一个id,该id将由create方法返回并在对象中设置。某些数据库需要生成ID的序列,在这种情况下,序列名称将自动生成。要指定序列的名称,请使用generatedIdSequence。只能指定其中一个,id和generatedIdSequence。

您必须使用generatedId(在这种情况下,必须生成所有ID)或id(在这种情况下您可以设置它们),但不能同时使用两者。