您的位置:首页 > 移动开发 > Android开发

Android数据库升级,数据不丢失解决方案

2014-12-16 13:38 477 查看
假设要更新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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: