| 2、创建新表 CREATETABLE Test(Id VARCHAR(32) PRIMARY KEY ,CustomName VARCHAR(32) NOTNULL , Country VARCHAR(16) NOTNULL); 
 3、导入数据 INSERTINTO Order SELECT id, “”, Age FROM _Order; 
 4、删除临时表 DROPTABLE _Order; 通过以上四个步骤,就可以完成旧数据库结构向新数据库结构的迁移,并且其中还可以保证数据不会因为升级而流失。  当然,如果遇到减少字段的情况,也可以通过创建临时表的方式来实现。 实现代码如下 @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  if (newVersion == 2) {  char str = '"';  db.beginTransaction();  db.execSQL("ALTER TABLE Order RENAME TO _Order");  db.execSQL("CREATE TABLE Order(Id integer primary key autoincrement , CustomName VARCHAR(20) NOT NULL,"  + " Country VARCHAR(32) NOT NULL , OrderPrice VARCHAR(16) NOT NULL)");  db.execSQL("INSERT INTO Order SELECT Id, " + str + str  + ", CustomName, OrderPrice FROM _Order");  db.setTransactionSuccessful();  db.endTransaction();  } } 
 多个数据库版本的升级 假如我们开发的程序已经发布了两个版本:V1.0,V2.0,我们正在开发V3.0。版本号分别是1,2,3。对于这种情况,我们应该如何实现升级?  用户的选择有: 
    V1.0 -> V3.0 DB 1 -> 2V2.0 -> V3.0 DB 2 -> 3 数据库的每一个版本所代表的数据库必须是定义好的,比如说V1.0的数据库,它可能只有两张表TableA和TableB,如果V2.0要添加一张表TableC,如果V3.0要修改TableC,数据库结构如下: V1.0 —> TableA, TableB V1.2 —> TableA, TableB, TableC V1.3 —> TableA, TableB, TableC (Modify) 
 代码如下: @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {  if (1 == oldVersion) {  String sql = "Create table C....";  db.execSQL(sql);  oldVersion = 2;  }  if (2 == oldVersion) {  //modify C  oldVersion = 3;  } } 
 导入已有数据库 /**  * Created by Owen Chan  * On 2017-09-26.  */ public class DbManager {  public static final String PACKAGE_NAME = "com.example.sql";  public static final String DB_NAME = "table.db";  public static final String DB_PATH = "/data/data/" + PACKAGE_NAME;  private Context mContext;  public DbManager(Context mContext) {  this.mContext = mContext;  }  public SQLiteDatabase openDataBase() {  return SQLiteDatabase.openOrCreateDatabase(DB_PATH + "/" + DB_NAME, null);  }  public void importDB() {  File file = new File(DB_PATH + "/" + DB_NAME);  if (!file.exists()) {  try {  FileOutputStream out = new FileOutputStream(file);  int buffer = 1024;  InputStream in = mContext.getResources().openRawResource(R.raw.xxxx);  byte[] bts = new byte[buffer];  int lenght;  while ((lenght = in.read(bts)) > 0) {  out.write(bts, 0, bts.length);  }  out.close();  in.close();  } catch (Exception e) {  e.printStackTrace();  }  }  } } 
 (编辑:广西网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |