Android переименовать базу данных SQLite - PullRequest
6 голосов
/ 20 ноября 2011

Можно ли переименовать базу данных, уже созданную в Android?

В своем обновлении приложений я хотел бы переименовать старую базу данных и установить новую, затем сравнить некоторые значения и, наконец, удалить старую.

Я делаю создание из файла sqlite в папке активов. Вот почему я не могу переименовать все таблицы и вставить новые.

Пояснение:

Старая база данных будет содержать только одну таблицу, с которой мне нужно сравнить значения с новой (из обновления) базы данных.

Обе базы данных были скопированы из файла sqlite в папке активов.

После того, как я сравню значения из старой базы данных с новой, я удалю старую и использую новую вместо нее со сравниваемыми значениями.

То, о чем я думал, это переименовать старое, создать новое на его месте и сделать все выше.

Ответы [ 4 ]

9 голосов
/ 20 ноября 2011

Просто переименуйте файл. Сначала убедитесь, что база данных закрыта!

Назовите это в вашем классе деятельности:

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

    databaseFile.renameTo(oldDatabaseFile);
}

Ответ на уточнение. Переименуйте старую базу данных (как указано выше), скопируйте новую из папки активов, откройте обе базы данных и проведите сравнение. Затем удалите старый файл.

3 голосов
/ 20 ноября 2011

Лорд Флэш прав, вы должны удалить старую БД и скопировать новую…

Если вы используете 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
    }
}
0 голосов
/ 27 июня 2018

Благодаря ответу Кевина Галлигана я смог создать функцию в своем приложении 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)
    }
}
0 голосов
/ 20 ноября 2011

Невозможно переименовать таблицу sql напрямую.

Но вы можете скопировать его, создав новый и удалив старый.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...