Android 2.2上使用FTS3的SQLite的RowId不正确

Android 2.2上使用FTS3的SQLite的RowId不正确,android,sqlite,fts3,Android,Sqlite,Fts3,我遇到sqlite和fts3的rowid值不正确 基本上,插入前两行,rowId是1和2 分别地但是,第三个insert返回4而不是3 我在我的contentprovider中删除了以下日志消息 插入行: SQLiteDatabase database = databaseHelper.getWritableDatabase(); long rowId = database.insert(NOTES_TABLE, Note.NOTE, values); Log.d("NoteProvider",

我遇到sqlite和fts3的rowid值不正确

基本上,插入前两行,rowId是1和2 分别地但是,第三个insert返回4而不是3

我在我的contentprovider中删除了以下日志消息 插入行:

SQLiteDatabase database =
databaseHelper.getWritableDatabase();
long rowId = database.insert(NOTES_TABLE, Note.NOTE, values);
Log.d("NoteProvider", "RowId inserted was " + rowId);
该日志消息的输出为:

02-21 21:10:12.773: DEBUG/NoteProvider(2486): RowId inserted was 1
02-21 21:10:20.623: DEBUG/NoteProvider(2486): RowId inserted was 2
02-21 21:10:25.883: DEBUG/NoteProvider(2486): RowId inserted was 4
那么3号怎么了

此外,我还导出了sqlite数据库,以便在sqlite中查看 浏览器和内容表显示1、2和3

因此创建了3个,但返回了4个

我测试了10次,之后rowId是连续的, 但还是差1分

数据库创建脚本是:

database.execSQL("CREATE VIRTUAL TABLE " + NOTES_TABLE + "
USING fts3 ("
           + Note.TITLE + ", "
           + Note.NOTE + ", "
           + Note.CREATED_DATE + ", "
           + Note.MODIFIED_DATE + ");");
我假设我做错了什么可怕的事,但我想不出来 弄清楚是什么。 有人能帮我吗

编辑1:
进行了更多测试,在2.3.1和2.1上得到了相同的结果。
虽然在2.1中,ID在1、3(跳过2)时

编辑2:
终于想出了一个变通办法。然而,我认为这是一个相当严重的错误或东西。 我最后做的是从表中选择最大rowid,然后将该值设置为插入时的rowid。这是一个彻底的解决方案。一个非常肮脏和廉价的黑客,但这是我唯一能可靠工作的东西。无论如何,代码如下:

SQLiteDatabase database = databaseHelper.getWritableDatabase();
SQLiteStatement statement = database.compileStatement("select ifnull(max(rowid), 0) as rowid from " + NOTES_TABLE);
long maxRowId = statement.simpleQueryForLong();
Log.d("NoteProvider", "Statement returned " + maxRowId);
long rowId = maxRowId + 1;
values.put("rowid", rowId);
database.insert(NOTES_TABLE, null, values);
Log.d("NoteProvider", "RowId inserted was " + rowId);
编辑3:
看起来另一个人有这个问题。

我也遇到了同样的问题,并提出了与您类似的解决方案:)

然而,由于使用FTS3,我已经完全重新设计了数据库:将非文本列推到单独的表中,将文本字段推到另一个表中,并为查询创建视图;以及用于删除的触发器


因此,现在我使用的是好的
表。_ID
:)

这看起来是SQLite中的一个bug。原始帖子“编辑2”中的解决方案似乎可以正常工作。我还没有在蜂巢中试用过,以验证它是否已在蜂巢中修复。

我在Android应用程序中遇到了同样的问题。在蜂巢中工作得很好,但一旦我回到Android上的早期版本(我想还有SQLite),我也看到了这个bug。我缩小了问题的范围,使之成为用于在insert上填充fts表的insert触发器。当我移除它时,问题就消失了。我觉得它闻起来像个SQLite bug。