1. 程式人生 > >Android-Sqlite-升級操作

Android-Sqlite-升級操作

一想到Android到資料庫,只需要想到一個類 SQLiteOpenHelper,然後寫一個類繼承 SQLiteOpenHelper,重寫構造方法,對資料庫進行配置

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
  public MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) {
      super(context, name, factory, version);
  }
}

 

SqliteDatabase資料庫,所寫的所有SQL語句都是通過系統sqlite.c檔案執行成資料庫檔案的,SQlite資料庫是關係型資料庫,輕量級,體積小等特點

 

Android中的資料庫升級,什麼時候需要資料庫升級?

答:例如:當釋出上線的APP,已有使用者在使用此APP,而這個APP的某張表只有name,age,現在還缺少一個欄位,就需要資料庫是增加表字段 同時保證其他資料不受影響。

 

在以前的資料庫版本號上+1就能執行 onUpgrade 方法

private static final int VERSION = 2;

 

增加表字段,新增加的表字段 要允許為空

db.execSQL("alter table "+TABLE_NAME+" add sex text null");

 

package liudeli.datastorage.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

public class MySQLiteOpenHelper extends
SQLiteOpenHelper { public static MySQLiteOpenHelper mySQLiteOpenHelper; /** * 由於表名每次使用很頻繁,所有定義成常量 */ public static final String TABLE_NAME = "student_table"; private static final String DB_NAME = "person_info.db"; private static final int VERSION = 2; public synchronized static MySQLiteOpenHelper getInstance(Context context) { if (null == mySQLiteOpenHelper) { mySQLiteOpenHelper = new MySQLiteOpenHelper(context, DB_NAME, null, VERSION); } return mySQLiteOpenHelper; } /** * 當開發者呼叫 getReadableDatabase(); 或者 getWritableDatabase(); * 就會通過此構造方法配置的資訊 來建立 person_info.db 資料庫 * 此方法的另外作用是,如果存著資料庫就開啟資料庫,不存著資料庫就建立資料庫 * @param context 上下文 * @param name 資料庫名 * @param factory 遊標工廠 * @param version 版本,最低為1 */ private MySQLiteOpenHelper(Context context, String name, SQLiteDatabase.CursorFactory factory, int version) { super(context, name, factory, version); } /** * 此方法是何時呼叫? ,是需要開發者呼叫 getReadableDatabase(); 或者 getWritableDatabase(); * 此方法的作用是,如果沒有表就建立開啟,如果有表就開啟 * @param db 可執行SQL語句 */ @Override public void onCreate(SQLiteDatabase db) { db.execSQL("create table "+TABLE_NAME+"(_id integer primary key autoincrement, name text, age integer);"); } /** * 此方法用於資料庫升級 * @param db 可執行SQL語句 * @param oldVersion 以前舊版本的版本號 * @param newVersion 現在目前最新的版本號 */ @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("alter table "+TABLE_NAME+" add sex text null"); } }

 

升級成功後的 sex 欄位: