Android開發筆記-建立SQLite實作類別

內容說明:產生 SQLiteOpenHelper 類別存取資料庫

資料來源:Android南部工作坊

在 Android 你可以透過 SQLite 來進行資料庫的存取。但是在使用前必需先自己實作 SQLiteOpenHelper 類別。在建立一個新的空白的class之後,加入「extends SQLiteOpenHelper」指令,系統就會要求建立基本的方法,依照系統指示所建立的程式框架如下:

package moke.test;

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

public class SQLite extends SQLiteOpenHelper {
    public SQLite(Context context, String name, CursorFactory factory,
            int version) {
        super(context, name, factory, version);
        // TODO Auto-generated constructor stub
        //context=內容物件;name=傳入資料庫名稱;factory=複雜查詢時使用;version=資料庫版本
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub
        
    }

}

由於通常一支程式只會使用一個資料庫,因此我們可以省略建構子傳入的部份參數。此外,為了讓所有的方法都存取相同的資料庫,必需加入 SQLiteDatabase 物件。修改後的建構子如下:

private static final String DATABASE_NAME = "moke_config.db"; //資料庫名稱
    private static final int DATABASE_VERSION = 1;  //資料庫版本
    
    private SQLiteDatabase db;
    
    public SQLite(Context context) {    //建構子
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        db = this.getWritableDatabase();
    }

接下來要實作 onCreate 與 onUpgrade 方法。onCreate 是當資料庫建立時會執行的方法,我們可以在這裡建立資料表或設定預設的資料庫參數。onUpgrade 是當資料庫的版本不一致時,會執行的方法。如果新舊版本的資料表格式不同,有二種處理方式。第一種是將舊的資料表刪除,直接建立新的資料表,但是這樣原有的資料就會消失,因此第二種方法是將舊的資料表按照新的表格格式儲存,存完之後再刪除舊的。這裡的範例先用最簡單的方式來撰寫,直接刪除舊的資料表。完整的 SQLiteOpenHelper 實作程式碼如下:

package moke.test;

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

public class SQLite extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "moke_config.db";   //資料庫名稱
    private static final int DATABASE_VERSION = 1;  //資料庫版本
    
    private SQLiteDatabase db;
    
    public SQLite(Context context) {    //建構子
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        db = this.getWritableDatabase();
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String DATABASE_CREATE_TABLE =
            "create table config ("
                + "_ID INTEGER PRIMARY KEY,"
                + "name TEXT,"
                + "value INTEGER"
            + ");";
        //建立config資料表,詳情請參考SQL語法
        db.execSQL(DATABASE_CREATE_TABLE);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        //oldVersion=舊的資料庫版本;newVersion=新的資料庫版本
        db.execSQL("DROP TABLE IF EXISTS config");  //刪除舊有的資料表
        onCreate(db);
    }
}

關連文章:SQLite類別中進行增刪改查使用Cursor讀取SQLite回傳值