【发布时间】:2019-02-18 12:19:35
【问题描述】:
Android,SQLite:我想在 myTable 中的其他行之间插入行,使用 android 中的 SQLite。为此,我试图增加从第 3 行开始的所有行的 id。这样我就可以在第 3 行插入一个新行。
myTable 的主键是列 id。表中没有其他约束。
我已经尝试使用https://stackoverflow.com/a/9177264/6671004 中提到的查询。此查询确实在 mySQL 中有效,但在 Android (SQLite) 中无效
这是代码行:
database.execSQL("UPDATE myTable SET id = (id + 1) where id > 2 ORDER BY id desc");
这是我在 Android Studio 上遇到的错误(编译时): https://imgur.com/a/9r0iyAa
这是我从查询中删除“ORDER BY id DESC”时遇到的异常:
java.lang.RuntimeException:无法启动活动 ComponentInfo{...}:android.database.sqlite.SQLiteConstraintException:唯一约束失败:myTable.id(代码 1555)
这是正确的方法吗?还是有更好的办法?
【问题讨论】:
-
Is this the correct way to do this?否。ORDER BY子句适用于查询 (SELECT ...),不适用于命令。在插入或更新数据时,您不应该关心排序顺序,只在演示时关心,如果这很重要的话。 -
您的第一个错误是尝试使用 rowid 来确定排序。不要那样做。
-
@Fantômas 我同意,但我有一个场景,这似乎是最好的选择,有什么办法可以做到吗?
-
据我了解,每个插入/更新操作都会在 DB 中进行内部锁定,以便其他写入也需要一些时间进行读取,并且直到事务完成其他读取无法获得更新,所以顺序更新是从 sqlite 内部完成的,应该不会影响。但是这里给出的错误是因为您已将“id”设置为唯一字段,并使用已经存在的 id 值更新它将通过约束错误。
标签: android sql database sqlite