2013-05-20 62 views
3

我想使用「DELETE FROM SQLITE_SEQUENCE」SQL語句來重置_ID rowId的編號系統,這是表的主鍵。這使得表格的第一行再次爲1。我能夠在java桌面應用程序中完成此操作,但是在這個android應用程序中它不起作用。有任何想法嗎?無法重置SQLite表中的主鍵編號

編輯:我發現並修復了運行時錯誤。所以我從問題中刪除了堆棧跟蹤。該部分是固定的,但現在它不會重置行的編號。當我顯示數據庫時,它顯示相同的編號。例如,如果我刪除第3行,那麼在「DELETE FROM SQLITE_SEQUENCE is used。」之後仍然缺少第3行,還有什麼我需要在運行該SQL語句之後執行的操作嗎?就像reaload數據庫一樣?我沒必要這樣做與Java應用程序。

從數據庫類

public static final String MYDATABASE_NAME = "my_database"; 
    public static final String MYDATABASE_TABLE = "my_table"; 
    public static final int MYDATABASE_VERSION = 1; 
    public static final String _ID = "_id"; 
    public static final String TABLE_STRING = "table_string"; 
    public static final String PAGE = "page"; 
    public static final String VERSION = "version"; 

    //create table MY_DATABASE (_ID integer primary key, Content text not null); 
    private static final String SCRIPT_CREATE_DATABASE = 
     "CREATE TABLE IF NOT EXISTS " + MYDATABASE_TABLE + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
     TABLE_STRING + " TEXT, " + PAGE + " TEXT, " + VERSION + " TEXT);"; 

    SQLiteDatabase sqLiteDatabase; 
    SQLiteHelper sqLiteHelper; 
    Context context; 

從數據庫類

public void resetRowNumbers(){ 

      sqLiteDatabase.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE NAME = 
      '" + MYDATABASE_TABLE + "'"); 
     } 

從MainActivity類別

public void resetRowNumbering(){ 
    db = new Database(getApplication()); 
    db.openToWrite(); 
    db.resetRowNumbers(); 
    db.close(); 
} 
+0

從DELETE FROM SQLITE_SEQUENCE WHERE NAME = my_table'沒有您的代碼似乎需要的引號,因此您可能已經更改了自錯誤消息以來的代碼。你可以添加當前的消息嗎? –

+0

我剛剛更新了這個問題,在運行時沒有更多的堆棧跟蹤錯誤,但另一個問題。 – Kevik

+0

如果表中還有數據,即使清除sqlite_sequence,SQLite也不會從1開始序列號。您是否在刪除序列的同時清理了表格? –

回答

1

這裏是我發現的代碼工作:

sqLiteDatabase.execSQL("DELETE FROM '" + MYDATABASE_TABLE + "'"); 
sqLiteDatabase.execSQL("DELETE FROM SQLITE_SEQUENCE WHERE NAME = 
    '" + MYDATABASE_TABLE + "'"); 

答案是對於有*在DELETE之間從上面的第一個SQL語句代碼的一部分。對於使用*的Android不起作用。它導致運行時錯誤。儘管有時在SQL語句的互聯網示例中顯示了這一點。它不適用於Android版本的SQLite。

正確的說法是:

"DELETE FROM '" + MYDATABASE_TABLE + "'" 

這將刪除表中的所有行。那麼使用後:

"DELETE FROM SQLITE_SEQUENCE WHERE NAME = '" + MYDATABASE_TABLE + "'" 

這將重置主鍵編號從1開始,當你進入一個新的行。

1

那麼首先你不應該刪除的序列,但它重置爲零:

"UPDATE sqlite_sequence SET seq = 0 WHERE name= '" + MYDATABASE_TABLE + "'" 

但一般說,你可能知道這一點,這是幾乎從來沒有。一個好的主意,重置序列。

+0

感謝您的評論,我會嘗試一下,看看會發生什麼 – Kevik