Android重命名SQLite数据库

时间:2011-11-20 19:10:02

标签: java android sqlite

是否可以重命名已在android中创建的数据库?

在我的应用更新中,我想重命名旧数据库并安装新数据然后比较一些值,最后删除旧数据库。

我正在从assets文件夹中的sqlite文件进行创建。这就是为什么我不能重命名所有表并插入新表。

澄清:

旧数据库将只包含一个表,我需要将这些表与新的(来自更新)数据库进行比较。

两个数据库都已从资产文件夹中的sqlite文件复制过来。

一旦我将旧数据库中的值与新数据库进行比较,我将删除旧数据库,并使用我所比较的值来使用新数据。

我想做的是重命名旧的创造新的地方并做上面的一切。

4 个答案:

答案 0 :(得分:9)

只需重命名文件即可。确保首先关闭数据库!

在您的活动类中调用此方法:

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

    databaseFile.renameTo(oldDatabaseFile);
}

对澄清的回应。重命名旧数据库(如上所述),从assets文件夹中复制新数据库,打开两个数据库并进行比较。然后删除旧文件。

答案 1 :(得分:3)

Lord Flash是对的,你应该删除旧的数据库并复制新的数据库...

假设您使用SQLiteOpenHelper,可以在createDatabaseIfRequired();getReadableDatabase()

中使用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
    }
}

答案 2 :(得分:0)

无法直接重命名sql表。

但是你可以复制它创建一个新的并删除旧的。

答案 3 :(得分:0)

由于凯文·加里根(Kevin Galligan)的回答,我能够在Kotlin Android应用程序中创建一个函数,以便在需要时可以重命名数据库文件。

如果您使用的是Java,则需要稍稍更改语法,但希望代码应该有些不言自明。

val x: String = "Hello"
//in Kotlin would be
String x = "Hello";
//in Java, for example.

无论如何,这是我的代码,如果有任何问题,请随时提问:

private fun checkAndRenameDatabase(oldName: String, newName: String) {
    val oldDatabaseFile: File = getDatabasePath(oldName)
    val oldDatabaseJournal: File = getDatabasePath("${oldName}-journal")

    // Can use this to check files beforehand, using breakpoints 
    //val files = oldDatabaseFile.parentFile.listFiles()

    if(oldDatabaseFile.exists() || oldDatabaseJournal.exists()) {
        db.close()  // Ensure existing database is closed

        val newDatabaseFile: File = getDatabasePath(newName)
        val newDatabaseJournal: File = getDatabasePath("${newName}-journal")

        if(oldDatabaseFile.exists()) {
            if(newDatabaseFile.exists()) {
                newDatabaseFile.delete()
            }
            oldDatabaseFile.renameTo(newDatabaseFile)
        }

        if(oldDatabaseJournal.exists()) {
            if(newDatabaseJournal.exists()) {
                newDatabaseJournal.delete()
            }
            oldDatabaseJournal.renameTo(newDatabaseJournal)
        }

        // Use with breakpoints to ensure files are now in order
        //val newFiles = oldDatabaseFile.parentFile.listFiles()

        // Re-open database with new name
        db = SQLiteDBHelper(applicationContext, newName)
    }
}