SQLiteAsyncConnection 按顺序插入多行?
SQLiteAsyncConnection inserting multiple row in order?
我以前使用过 SQLite,在 for
循环中使用 Insert 添加多行很慢。解决方案是使用 transaction
.
现在我在 SQLite.Net(对于 ORM)中使用 SQLiteAsyncConnection
,我也尝试使用 transaction
。它有效,但只有一个问题。插入顺序不是数据的顺序。
Database.RunInTransactionAsync(
(SQLiteConnection conn) => {
foreach (var row in rows)
{
conn.InsertOrReplace(row);
}
conn.Commit();
}
);
如果 rows
包含 [1,2,3,4,5,6],数据库中的行类似于 [3,1,2,6,4,5]。我怎样才能保留原来的订单?
请注意,我指的只是新插入的行。即使认为代码正在替换现有行,但在测试时数据库中没有要替换的现有行。
PS:该行有 ID
字段,即 [PrimaryKey]
,但在 rows
中,行是未按 ID
排序。似乎在数据库中,行按 ID
排序。我不希望它按 ID
排序,但要保持原来的顺序。
PS 2:我需要知道最后插入的行的ID
。当使用 DB Browser for SQLite
之类的 GUI 工具查看数据库或通过 LIMIT 1
获取最后一项时,似乎 SQLite 已自动按 ID
对行进行排序。我做了一些 Google 搜索,它按照 SQL 的规则说,当没有 ORDER BY
时,返回的行的顺序不能保证是物理顺序,无论如何。我应该创建另一个字段并将其设置为主要的、自动增加的字段吗?
目前,ID
保证每行是唯一的,但'ID'是数据本身的一部分,而不是专门为与数据库一起使用而添加的字段。
SQL 表在逻辑上是无序的,所以如果您想要某种顺序,您总是必须在查询中使用 ORDER BY。
如果您的数据不包含与插入顺序对应的任何值(例如,时间戳),那么您必须使用rowid,即添加一个声明为 INTEGER PRIMARY KEY 的列。
我以前使用过 SQLite,在 for
循环中使用 Insert 添加多行很慢。解决方案是使用 transaction
.
现在我在 SQLite.Net(对于 ORM)中使用 SQLiteAsyncConnection
,我也尝试使用 transaction
。它有效,但只有一个问题。插入顺序不是数据的顺序。
Database.RunInTransactionAsync(
(SQLiteConnection conn) => {
foreach (var row in rows)
{
conn.InsertOrReplace(row);
}
conn.Commit();
}
);
如果 rows
包含 [1,2,3,4,5,6],数据库中的行类似于 [3,1,2,6,4,5]。我怎样才能保留原来的订单?
请注意,我指的只是新插入的行。即使认为代码正在替换现有行,但在测试时数据库中没有要替换的现有行。
PS:该行有 ID
字段,即 [PrimaryKey]
,但在 rows
中,行是未按 ID
排序。似乎在数据库中,行按 ID
排序。我不希望它按 ID
排序,但要保持原来的顺序。
PS 2:我需要知道最后插入的行的ID
。当使用 DB Browser for SQLite
之类的 GUI 工具查看数据库或通过 LIMIT 1
获取最后一项时,似乎 SQLite 已自动按 ID
对行进行排序。我做了一些 Google 搜索,它按照 SQL 的规则说,当没有 ORDER BY
时,返回的行的顺序不能保证是物理顺序,无论如何。我应该创建另一个字段并将其设置为主要的、自动增加的字段吗?
目前,ID
保证每行是唯一的,但'ID'是数据本身的一部分,而不是专门为与数据库一起使用而添加的字段。
SQL 表在逻辑上是无序的,所以如果您想要某种顺序,您总是必须在查询中使用 ORDER BY。
如果您的数据不包含与插入顺序对应的任何值(例如,时间戳),那么您必须使用rowid,即添加一个声明为 INTEGER PRIMARY KEY 的列。