2011-11-20 83 views
5

是否有可能重命名已經在android中創建的數據庫?Android重命名SQLite數據庫

在我的應用程序更新中,我想重命名舊數據庫並安裝一個新的,然後比較一些值,最後刪除舊的。

我正在做資產文件夾中的sqlite文件創建。這就是爲什麼我不能重新命名所有的表格並插入新的表格。

澄清:

舊數據庫將包含只有一個表,我需要從對新(從更新)數據庫比較值。

這兩個數據庫都已從assets文件夾中的sqlite文件複製過來。

一旦我將舊數據庫的值與新值進行比較,我將刪除舊數據庫,並將其與我比較的值一起使用。

我當時想要做的是重新命名舊的創建新的地方,並做上述所有事情。

+0

你爲什麼如果在應用程序更新時直接更新數據庫,那麼做什麼呢? – user370305

回答

3

主Flash是正確的,你應該刪除舊的數據庫,並複製到新的一個...

假設你使用SQLiteOpenHelper,你可以在getReadableDatabase()使用createDatabaseIfRequired();方法和getWritableDatabase()

private boolean checkOldDatabase() { 
    Log.d(Constants.LOGTAG, "OperationDbHelper.checkDatabase"); 
    File f = new File(DB_PATH + OLD_DB_NAME); 
    return f.exists(); 
} 

public void createDatabaseIfRequired() throws IOException, SQLiteException { 
    if (!checkOldDatabase()) { 
     // do db comparison/delete old db/copy new db 
    } 
} 
0

無法直接重命名sql表。

但是你可以複製它創建一個新的和刪除舊的。

+0

啊,聽起來很完美,你可能會提供一個簡單的示例或鏈接到有用的東西。我唯一需要解決的問題是如何連接兩個數據庫來進行比較。 – Somk

7

只需重命名文件。確保數據庫先關閉!在活動類

調用此:

private void renameDatabase() 
{ 
    File databaseFile = getDatabasePath("yourdb.whatever"); 
    File oldDatabaseFile = new File(databaseFile.getParentFile(), "yourdb_old.whatever"); 

    databaseFile.renameTo(oldDatabaseFile); 
} 

迴應澄清。重命名舊數據庫(如上所述),從資產文件夾複製新數據庫,打開兩個數據庫並進行比較。然後刪除舊文件。

+0

我爲什麼要重命名文件?我正在從文件寫入數據庫。一旦寫入,它不會再被使用。 – Somk

+1

從你的問題:「是否有可能重命名已經在android中創建的數據庫?」這意味着重命名文件,本質上。你究竟想要做什麼? –

+0

再一次,「...我想重命名舊的數據庫並安裝一個新的...」。仍然困惑。這是重命名文件。你想複製一個新的表?不同的問題。 –