假设要更新TableC表,建议的做法是:
1) 将TableC重命名为TableC_temp
SQL语句可以这样写:ALERT TABLE TableC RENAME TO TableC_temp;
2) 创建新的TableC表
3) 将数据从TableC_temp中插入到TableC表中
SQL语句可以这样写:INSERT INTO TableC (Col1, Col2, Col3) SELECT (Col1, Col2, Col3) FROM TableC_temp;
经过这三步,TableC就完成了更新,同时,也保留了原来表中的数据。
注意:
在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();
}
}