我正在从一些web api中读取gson中的数据。我想在数据库中以与api结果相同的顺序插入行。现在,当我使用带有.callBatchTasks(new Callable<Void>() {}
方法的ormlite插入数据时,它会以错误的顺序插入数据。实际上,它会通过主键自动插入数据。这意味着数据按主键排序。在我的模型类中,我将该列用作id = true
,没有别的。
当我不使用dao的CallBatchTasks函数时,这是相同的。
编辑-----
但这是我遇到的问题,我必须要做的是我从列中删除了id = true并运行相同的代码,然后按照我想要的正确顺序插入数据。意味着数据就像是
id值
2数据1
3数据2
1数据3
35 data4
23 data5
现在,当我在此模型类中为列设置id = true时,在数据库中检查时,数据插入如下: -
id值
1数据3
2数据1
3数据2
23数据5
35 data4
但是当我从模型类中删除id = true时,数据按正确的顺序插入: -
id值
2数据1
3数据2
1数据3
35 data4
23 data5
我不知道在ormlite中我在哪里弄错了。首先我认为检索时出现问题然后我检查了数据库并且我以错误的顺序插入数据。
答案 0 :(得分:1)
它以错误的顺序插入数据 - 事实上它会自动按主键插入数据。
ORMLite根本不施加任何订单限制。如果你打电话:
dao.insert(data1);
dao.insert(data2);
dao.insert(data3);
然后ORMLite将按此顺序发出SQL。根本没有排队的数据或命令。
我相信您正在讨论如何从数据库检索数据。同样,ORMLite也没有规定任何订单限制。数据库顺序永远无法保证。调用上述插入语句后,您可以翻阅数据并将其视为data2
,data3
,data1
。如果您需要特定订单,则应使用orderBy(...)
query-builder方法指定它。
无论如何,这是一个数据库问题,而不是ORMLite的问题。如果直接通过数据库发出相同的SQL查询,则会看到相同的输出。
从您的描述中,当您从数据库中检索具有id = true
的实体时,您似乎获得了不同的数据顺序。同样,如果更有效地执行此操作,数据库可以选择迭代主键索引。数据库顺序没有限制。
如果您希望数据按插入顺序排列,那么我建议您添加generatedId = true
并在当前ID字段中添加索引。然后,您可以使用生成的id字段轻松地通过insert-order进行排序。但是,这意味着您必须使用dao.queryForEq(...)
或其他内容查找当前的ID字段。