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()メソッドでは、テーブルを削除するときにトランザクションを使用することで、変更がすぐにデータベース・ファイルに反映されるように注意します. 
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();  

    }  

}