如何在 Ormlite 中更新表 sqlite_sequence?我只需要更新序列。我如何通过 ORMLite 获取该表?
编辑
我找不到执行此操作的 ORLite 工具,因此我使用简单的 sqlite 查询。在我的类扩展 OrmLiteSqliteOpenHelper 中,我使用 SQLiteDatabase 进行更新。
编辑2 ;)
在我的项目中,我保留了 Lesson 类和 WeekDefinition 类。
class Lesson{
@DatabaseField(generatedId=true)
private int id;
...
}
class WeekDefinitions{
@DatabaseField(generatedId=true)
private int id;
@DatabaseField(foreign=true, columnName="lesson_id")
private Lesson lesson;
...
}
现在,当我添加新类(class)时,id 是递增的。例如
id = 1 Math
id = 2 English
id = 3 Medicine
在 weekDefinition 中:
id = 1 lesson_id = 1 nr = 20
id = 2 lesson_id = 1 nr = 22
id = 3 lesson_id = 2 nr = 32
...
id = 12 lesson_id = 3 nr = 3
SQLite 将此行添加到 sqlite_sequence(使用自动增量时)
rowId = 1 name = lesson seq = 3
rowId = 2 name = weekDefinition seq = 12
现在,我删除了表 Lesson 和 WeekDefinition 中的所有行。 Lesson 和 WeekDef 在那之后是空的,但是 sqlite_sequence 仍然是一样的。这是个问题,因为表类(class)中的 id 从值 4 开始(类(class)中的 seq 来自 sqlite_sequence 并添加 1):
id = 4 Math
id = 5 English
id = 6 Medicine
和周定义
id = 13 lesson_id = 1 nr = 20
id = 14 lesson_id = 1 nr = 22
id = 15 lesson_id = 2 nr = 32
对于 lesson id = 4 ,Math i 应该得到 weekDefinitios,但是在 weekDefinitions lessons_id 中只有 1 到 3 的值 这是我的问题。我需要“重置”sqlite_sequence 表(或者有更好的解决方案?)
最佳答案
基于 Marcos Vasconcelos 的 answer :
UPDATE sqlite_sequence SET seq = (SELECT MAX(col) FROM Tbl) WHERE name="Tbl"
此查询会将seq
设置为Tbl
表中col
标识列中的最大值,因此不存在违规风险约束条件。
关于android - 如何在 sqlite 中重置自动增量序列号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5586269/