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

內容說明:產生 SQLiteOpenHelper 類別存取資料庫
資料來源:Android南部工作坊

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
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 物件。修改後的建構子如下:

8
9
10
11
12
13
14
15
16
	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 實作程式碼如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
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回傳值

Share on Google+
You can follow any responses to this entry through the RSS 2.0 feed.You can leave a response, or trackback from your own site.
30 Responses
  1. NKMUS says:

    您好
    請問版主大大.我用SQLite建立了一個DB檔後,想在JAVA及eclipes環境模擬下打開DB檔,進行資料叫出的語法為何呢??

  2. 救救我 says:

    請問~要怎麼將資料庫!!連結到程式裡面呢!?就是可以在程式裡面呼叫出資料庫!

  3. 救救我 says:

    Davina大大~可以留你的聯絡方式麻?想直接問你!!拜託

  4. fly12316 says:

    我最近也在學 Android with SQLite, 邊玩邊爬文.
    如果想要瀏覽整個資料庫內容, 可以裝 SQLite Expert Professional, 這是免費軟體 (當然也有另一套付費版).
    感覺蠻好用的, 基本的資料庫編輯查詢他都有, 還可以把編寫好的資料表導回 DDMS 內來模擬, 可以自己去孤狗大神那裏尋找~

  5. Mary says:

    大大你好!!
    我剛剛複製下來你的程式碼貼在我的eclipse運行
    結果他說"....stopped unexpectedly"
    但程式碼沒有錯誤 可以請大大幫我解答嗎~~

    • Davina says:

      不知道第一行的package有修改嗎?
      還有class名稱要與檔名一致
      這隻程式不是寫在主程式裡的,要另外開一個class檔
      所以如果程式完全正確的話~在主程式裡沒有建立SQLite物件,這些程式也完全不會被執行到
      既然如此無法執行就是主程式的問題了..

  6. Mary says:

    喔喔!!!是要再加一個class喔!!
    我以為是貼在主程式裡面~
    請問您知道完整建立的sqlite步驟嗎??或一個有用的sqlite的實例~
    因為我是新手...研究好久弄不出來 想跟大大要範例練習~
    package跟class名稱我都改了^^

    • Davina says:

      完整的建立步驟在內文裡面都有說明
      如果不熟悉Java的話~建議還是看書比較清楚
      有需要完整範例請寫信來索取

  7. Smallmouth says:

    您好!~ 最近碰到一個問題 在eclipse 跑模擬的時候可以正常執行把.db 寫入 data/data/...

    但是改用手機跑程式的時候 卻完全沒辦法寫入.db
    手機又沒辦法看data內的內容

    不知道是否有方法解決?

    • Davina says:

      我不清楚你的問題會是什麼~(如果是這個範例執行是沒有問題的)
      不過有軟體可以看手機裡的資料庫~你可以找找看

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *


七 − 6 =

你可以使用這些 HTML 標籤與屬性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>