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 -> 2
- V2.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();
- }
- }
- }
- }
(编辑:晋中站长网)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|