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()方法中,删除表时,注意使用事务处理,使得修改能立即反应到数据库文件中。
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(); } }
相关文章推荐
- Android数据库升级不丢失数据解决方案
- Android Sqlite 数据库升级时数据丢失解决方案
- Android 数据库升级 数据迁移 数据不丢失
- Android 数据库升级解决方案
- Android 数据库升级解决方案
- Android 数据库升级解决方案 .
- Android 数据库升级的解决方案
- Android 数据库升级解决方案
- Android 数据库升级完整解决方案 推荐
- 为了防止数据库崩溃使数据丢失的解决方案
- Android 数据库升级中数据保持和导入已有数据库
- Android 数据库升级解决方案
- android数据库升级中数据迁移、修改或删除列策略
- 升级Android应用程序的思路-对数据库的操作(保留数据)
- Android 数据库升级解决方案
- Android 数据库升级解决方案
- Android 数据库升级中数据保持和导入已有数据库
- android数据库升级及数据转移
- Android 数据库升级中数据保持和导入已有数据库(转)
- 【android】数据库升级完整解决方案