android sqlite 自动增,关于android:如何在sqlite中重置自动增量序列号

如何在Ormlite中更新表sqlite_sequence?我只需要更新seq。如何通过ORMLite获取该表?

编辑

我找不到ORLite工具来做这个,所以我使用简单的sqlite查询。在我的类扩展OrmLiteSqliteOpenHelper我使用SQLiteDatabase进行更新。

EDIT2;)

在我的项目中,我坚持课课和课堂定义。

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;

...

}

现在,当我添加新课程时,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中(使用autoincrement时)

rowId = 1   name = lesson         seq = 3

rowId = 2   name = weekDefinition seq = 12

现在,我从表Lesson和WeekDefinition中删除所有行。之后Lesson和WeekDef为空,但sqlite_sequence仍然相同。这是问题,因为表课程中的id从值4开始(seq来自sqlite_sequence for lesson并添加1):

id = 4 Math

id = 5 English

id = 6 Medicine

和weekDefinition

id = 13 lesson_id = 1  nr = 20

id = 14 lesson_id = 1  nr = 22

id = 15 lesson_id = 2  nr = 32

对于课程id = 4,Math我应该得到weekDefinitios,但在weekDefinitions中,lessons_id的值只有1到3

这是我的问题。我需要"重置"sqlite_sequence表(还是有更好的解决方案?)

你能否请你重新提一下你的问题并提供更多细节Bandzio。 我不知道你在这里问什么。 什么是"sqlite_sequence"? 您是否只想从数据库中的表中获取序列号? 那么你持久存在的对象只有一个生成的id?

Bandzio,你真的应该接受其中一个答案; 两者都很好,已经存在超过6个月

以Marcos Vasconcelos的回答为基础:

UPDATE sqlite_sequence SET seq = (SELECT MAX(col) FROM Tbl) WHERE name="Tbl"

此查询将seq设置为Tbl表中col标识列中的最大值,因此不存在违反约束的风险。

非常感谢我正在寻找的东西

我的更新没有反映在sqlite_sequence表上

@ byteC0de您是否将col替换为要更新的列名,并使用要更新的表名替换Tbl?

在.db文件中有一个名为sqlite_sequence的表

每行有两列

name这是表的名称

seq一个整数,表示此表的当前最后一个值

您可以将其更新为0

但请注意,您的表是否使用此ID作为唯一标识符。

UPDATE SQLITE_SEQUENCE SET SEQ= 'value' WHERE NAME='table_name';

如果要在ORMLite中发出常规数据库命令,可以使用updateRaw方法。请参阅javadocs。其他命令也有executeRaw。

lessonDao.updateRaw("delete from 'lesson';");

lessonDao.updateRaw("delete from sqlite_sequence where name='lesson';");

weekDefinitionDao.updateRaw("delete from 'weekdefinition';");

weekDefinitionDao.updateRaw(

"delete from sqlite_sequence where name='weekdefinition';");

您也可以删除并重新创建表格:

TableUtils.dropTable(WeekDefinition.class);

TableUtils.dropTable(Lesson.class);

TableUtils.createTable(Lesson.class);

TableUtils.createTable(WeekDefinition.class);

我认为真正的问题是为什么你的应用程序取决于这个数据库的内部数字?它真的不应该在乎。

怎么样不显示数字,所以它可以是1或1001,你的应用程序无关紧要?

你也可以永远不删除课程,但可能会添加一个隐藏的布尔字段。因此,如果它们被重新添加,隐藏字段可以设置为false,Math仍然是id#1。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值