2015-10-18 36 views
0

我创建了一个名为DRINK的表。我最初插入了两行。升级时,我想删除两行并将我的主键重置为1.我得到的行要删除,但没有任何运气重置主键。有人知道如何做到这一点的语法,或者甚至有可能吗?这是从我的onUpdate函数调用的函数:在Android中重置INTEGER PRIMARY KEY AUTOINCREMENT

private void updateMyDatabase(SQLiteDatabase db, int olderVersion, int newVersion){ 
    Log.v("DatabaseHelper","UPDATE MY DATABASE"); 
    if (olderVersion<1){ 
     db.execSQL("CREATE TABLE DRINK (_id INTEGER PRIMARY KEY AUTOINCREMENT," 
       + "NAME TEXT, " 
       + "DESCRIPTION TEXT, " 
       + "IMAGE_RESOURCE_ID INTEGER);"); 
     insertDrink(db,"latte","Espresso and Steamed Milk",R.drawable.latte); 
     insertDrink(db, "cappuccino", "This a Cappuccino", R.drawable.cap); 
    } 
    if (olderVersion < 2){ 
     db.execSQL("delete from DRINK"); 
     db.execSQL("alter table AUTO_INCREMENT =1"); //*** NEED HELP HERE*** 
     insertDrink(db, "coff", "Espresso and Steamed Milk", R.drawable.latte); 
    } 
} 

我在网上找到这段代码,但它不工作。谢谢。

db.execSQL("alter table AUTO_INCREMENT =1"); 

回答

2

删除行将不会重置ROWID。

SQLite的文档指出:

SQLite keeps track of the largest ROWID that a table has ever held using the special SQLITE_SEQUENCE table. The SQLITE_SEQUENCE table is created and initialized automatically whenever a normal table that contains an AUTOINCREMENT column is created. The content of the SQLITE_SEQUENCE table can be modified using ordinary UPDATE, INSERT, and DELETE statements. But making modifications to this table will likely perturb the AUTOINCREMENT key generation algorithm.

这个SQL应该做你需要的东西:

UPDATE SQLITE_SEQUENCE SET seq = <n> WHERE name = <table> 

其中n是你想设置和表是你的表名

+0

我得到的序列此日志错误:E/SQLiteLog:(1)在“<”附近:语法错误 –

+0

您是否将更改为所需的值? –

+0

是的,我做到了。下面是确切的代码行:db.execSQL(“UPDATE SQLITE_SEQUENCE SET seq = <1> WHERE name ='DRINK'”); –

相关问题