2016-06-13 40 views
1

我正在從數據庫的所有表中搜索批量刪除。如何在單個命令中使用sqllite截斷數據庫(清除數據庫中所有表的記錄)

DELETE FROM TABLE1,TABLE2,TABLE3; --(Is it possible) 

像我們有批量插入

INSERT INTO TABLE (a,b,c) VALUES (1,2,3),(4,5,6),(7,8,9); 

我的代碼由我不滿意,因爲它是這樣的。它能夠做到這一點。

Delete from table1; 
Delete from table2; 
Delete from table3; 

public void truncateDatabase() { 
    ArrayList<String> tables = new ArrayList<>(); 
    Cursor cursor = Database.getInstance().getWritableDatabase().rawQuery("SELECT name FROM sqlite_master WHERE type='table'", null); 
    if (cursor.moveToFirst()) { 
     while (!cursor.isAfterLast()) { 
      tables.add(cursor.getString(0)); 
      cursor.moveToNext(); 
     } 
    } 
    cursor.close(); 

    for (String table : tables) { 
     Database.getInstance().getWritableDatabase().execSQL("DELETE FROM " + table); 
     Database.getInstance().getWritableDatabase().execSQL("VACUUM"); 
    } 
} 

回答

1

正如documentation所示,單個DELETE語句工作在一個單一的表。

執行多個DELETE語句沒有任何問題。

但是,你應該執行真空只有一次,並考慮使用事務:

SQLiteDatabase db = Database.getInstance().getWritableDatabase(); 
db.beginTransaction(); 
try { 
    for (String table : tables) { 
     db.execSQL("DELETE FROM " + table); 
    } 
    db.setTransactionSuccessful(); 
} finally { 
    db.endTransaction(); 
} 
db.execSQL("VACUUM"); 
+0

我使用從表中刪除是有可trunacate數據庫 –

+0

[所有表的任何命令的可能性否](http://www.sqlite.org/lang.html)。 –

+0

感謝您的幫助CL,但我的代碼如何優化,因爲目前正在循環刪除和真空。根據你的建議>>(但你應該只執行一次VACUUM,並考慮使用交易)。任何例子我都會非常感謝你 –

相關問題