2016-11-17 9 views
0

私はメモのテーブルのID列を更新しようとしています。 3のIDを持つメモが削除されるのであれば、行の下には、現在のテーブルを作成するための3Sqliteオートインクリメント

sqLiteDatabase.execSQL("CREATE TABLE " + TABLE_NAME + "(" + 
      "ID INTEGER PRIMARY KEY AUTOINCREMENT, MEMO TEXT, URGENCY TEXT)"); 

のIDとなり、完全に正常に動作しますが、私は「自動インクリメント近い」sqliteのエラーを取得しています。

db.execSQL("ALTER TABLE " + TABLE_NAME + " AUTOINCREMENT = 
         (SELECT MAX(ID) FROM " + TABLE_NAME + ");"); 
+0

AUTOINCREMENTは、列に新しい行を追加すると、IDが自動的に1ずつ増加するため、この列に注意する必要はないことを意味します。行を削除すると減少しません。追加する次の行は、前の(削除された)行よりも1だけ大きくなります。 – aleksandrbel

答えて

2

AUTOINCREMENT私はあなたが期待しているように動作しません。

カラムがタイプINTEGER PRIMARY KEY AUTOINCREMENTである場合、わずかに異なるROWID選択アルゴリズムが使用されます。新しい行に選択されたROWIDは、少なくともで、これまでに存在していた最大のROWIDよりも大きいものが同じテーブルに存在します。

関連する問題