在Android中重置INTEGER PRIMARY KEY AUTOINCREMENT

时间:2015-10-18 00:38:52

标签: android sqlite

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

    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");

1 个答案:

答案 0 :(得分:2)

删除行不会重置ROWID。

SQLite文档声明:

  

SQLite跟踪表所持有的最大ROWID   使用特殊的SQLITE_SEQUENCE表。 SQLITE_SEQUENCE表是   每当普通表时自动创建和初始化   包含一个AUTOINCREMENT列。的内容   可以使用普通的UPDATE,INSERT修改SQLITE_SEQUENCE表,   和DELETE语句。但是对这个表进行修改会   可能扰乱AUTOINCREMENT密钥生成算法。

这个sql应该做你需要的:

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

其中n是您要设置的序列,table是您的表名