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