2014-02-18 91 views
0

我遇到了從我的應用程序中刪除SQLite文件的問題。 我正在使用的代碼如下:如何刪除Android中的SqLite文件?

​​

在此之前,我用的方法context.deleteDatabase(DATABASE_NAME)做到這一點。 的問題是:我運行此方法後,該應用程序不刷新,我有舊的數據庫,我能夠做的刪除,插入等 在這兩種情況下我不得不重新啓動我的應用程序,看看新的數據庫。

有時候,之後運行的方法,當我嘗試訪問一些方法需要的數據庫,與我沒有數據庫,並重新啓動後,錯誤應用程序崩潰,將創建新的數據庫。

我該怎麼辦?

編輯 我有一個很大的系統。我的數據庫有26個表格和很多約束條件。 刪除數據庫並重新創建它比較容易。

EDIT2

DbAdapter dba = new DbAdapter(context); 
SQLiteDatabase sqlite = dba.open();   

dba.close(); 
boolean d = context.deleteDatabase("CarroramaBD"); 

dba.open(); 
dba.close(); 

林做了緊密的分貝。

+0

刪除數據庫中的任何具體原因並不僅僅是空表或字段?每次刪除然後創建整個數據庫比較合適。總之看到你的問題這個答案http://stackoverflow.com/a/3598769/1979347 –

+0

我有一個大系統。我的數據庫有26個表格和很多約束條件。 – Roland

+0

在調用deleteDatabase()之前是否關閉了所有的數據庫連接?我想在這種情況下,你不必重新啓動應用程序... –

回答

0

爲什麼這樣做,而不是 你可以將表中您的數據庫並重新創建它們比刪除文件更加實用。

至於存儲舊值你的意見,你可以通過調用這個代碼刷新整個活動

public void refrehs_me() 
{ 
    Intent intent = getIntent(); 
    finish(); 
    startActivity(intent); 
} 

編輯:只是一個想法通過我的關於建立新的DB的頭腦,在創作的你的應用程序一個數據庫文件將被創建,做個像DB2該文件的副本,當你刪除,而不是試圖創建一個新的數據庫只是複製回來DB2爲DB等與每個刪除過程。

而對於副本 - 這裏是@Rakshi代碼

public void copy(File src, File dst) throws IOException { 
    InputStream in = new FileInputStream(src); 
    OutputStream out = new FileOutputStream(dst); 

    // Transfer bytes from in to out 
    byte[] buf = new byte[1024]; 
    int len; 
    while ((len = in.read(buf)) > 0) { 
     out.write(buf, 0, len); 
    } 
    in.close(); 
    out.close(); 
} 
+0

沒有工作。抱歉。 – Roland