android - 如何在 sqlite 中重置自动增量序列号

标签 android sqlite ormlite

如何在 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/

相关文章:

android - ORMlite 没有返回我刚刚保存的对象

java - 如何获取 TranslateAnimation 中的位置?

android - eclipse classic 4.2.1 - 从 android sdk 开始

Android:更改 Realm 迁移中的旧主键

sql - SQLite创建表AS,但重命名列并保留原始数据类型,键?

c# - PHP 命令 mysql_insert_id() 的等效 C#/SQLite 命令?

java - 通过循环获取List<String>中的字符串值进行显示

android - 关于多进程情况下的android Sqlite安全

java - ORMLite 初始化外部集合

java - 将大量 JSON 数据插入 android 中的 SQLite 数据库的方法是什么