zoukankan      html  css  js  c++  java
  • Android数据库升级,数据不丢失解决方案

    假设要更新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();  
        }  
    }  
  • 相关阅读:
    instanceof方法
    Java 实现接口计算圆柱的体积和面积并添加颜色
    Java代码执行顺序
    Java饿汉单例模式
    斐波那契数(动态规划和递归)
    Java 接口实现计算器加减乘除(字符交互界面)
    局部内部类详解_转载
    Java引用类型
    递归打印字符串
    时间复杂度
  • 原文地址:https://www.cnblogs.com/zgz345/p/4166947.html
Copyright © 2011-2022 走看看