Androidデータベースがアップグレードされ、データが失われないソリューション
2647 ワード
Tableを更新する場合は、次のようにします.
1)Tablecの名前をTablec_に変更temp
SQL文はこのように書くことができます:ALERT TABLE Tablec RENAME TO Tablec_temp;
2)新しいTableを作成する
3)データをTable_C_からtempでTableに挿入
SQL文は、INSERT INTO Table(Col 1,Col 2,Col 3)SELECT(Col 1,Col 2,Col 3)FROM Table_temp;
この3つのステップを経て、Table Cは更新を完了し、元のテーブルのデータも保持します.
注意:
onUpgrade()メソッドでは、テーブルを削除するときにトランザクションを使用することで、変更がすぐにデータベース・ファイルに反映されるように注意します.
1)Tablecの名前をTablec_に変更temp
SQL文はこのように書くことができます:ALERT TABLE Tablec RENAME TO Tablec_temp;
2)新しいTableを作成する
3)データをTable_C_からtempでTableに挿入
SQL文は、INSERT INTO Table(Col 1,Col 2,Col 3)SELECT(Col 1,Col 2,Col 3)FROM Table_temp;
この3つのステップを経て、Table Cは更新を完了し、元のテーブルのデータも保持します.
注意:
onUpgrade()メソッドでは、テーブルを削除するときにトランザクションを使用することで、変更がすぐにデータベース・ファイルに反映されるように注意します.
protected void upgradeTables(SQLiteDatabase db, String tableName, String columns)
{
try
{
db.beginTransaction();
// 1, Rename table.
String tempTableName = tableName + "_temp";
String sql = "ALTER TABLE " + tableName +" RENAME TO " + tempTableName;
execSQL(db, sql, null);
// 2, Create table.
onCreateTable(db);
// 3, Load data
sql = "INSERT INTO " + tableName +
" (" + columns + ") " +
" SELECT " + columns + " FROM " + tempTableName;
execSQL(db, sql, null);
// 4, Drop the temporary table.
execSQL(db, "DROP TABLE IF EXISTS " + tempTableName, null);
db.setTransactionSuccessful();
}
catch (SQLException e)
{
e.printStackTrace();
}
catch (Exception e)
{
e.printStackTrace();
}
finally
{
db.endTransaction();
}
}