Android-Sqlite-升級操作
阿新 • • 發佈:2018-12-07
一想到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 extendsSQLiteOpenHelper { 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 欄位: