是否可以重命名已在android中创建的数据库?
在我的应用更新中,我想重命名旧数据库并安装新数据然后比较一些值,最后删除旧数据库。
我正在从assets文件夹中的sqlite文件进行创建。这就是为什么我不能重命名所有表并插入新表。
澄清:
旧数据库将只包含一个表,我需要将这些表与新的(来自更新)数据库进行比较。
两个数据库都已从资产文件夹中的sqlite文件复制过来。
一旦我将旧数据库中的值与新数据库进行比较,我将删除旧数据库,并使用我所比较的值来使用新数据。
我想做的是重命名旧的创造新的地方并做上面的一切。
答案 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)
}
}