建立資料庫
Android 不自動提供資料庫。在 Android 應用程式中使用 SQLite,必須自己建立資料庫,然後建立表、索引,填充資料。Android 提供了 SQLiteOpenHelper 協助你建立一個資料庫,你只要繼承 SQLiteOpenHelper 類,就可以輕鬆的建立資料庫。SQLiteOpenHelper 類根據開發應用程式的需要,封裝了建立和更新資料庫使用的邏輯。SQLiteOpenHelper 的子類,至少需要實現三個方法:
•建構函式,調用父類 SQLiteOpenHelper 的建構函式。這個方法需要四個參數:上下文環境(例如,一個 Activity),資料庫名字,一個可選的遊標工廠(通常是 Null),一個代表你正在使用的資料庫模型版本的整數。
•onCreate()方法,它需要一個 SQLiteDatabase 對象作為參數,根據需要對這個對象填充表和初始化資料。
•onUpgrage() 方法,它需要三個參數,一個 SQLiteDatabase 對象,一箇舊的版本號碼和一個新的版本號碼,這樣你就可以清楚如何把一個資料庫從舊的模型轉變到新的模型。
下面範例程式碼展示了如何繼承 SQLiteOpenHelper 建立資料庫:
| 代碼如下 |
複製代碼 |
public class DatabaseHelper extends SQLiteOpenHelper { DatabaseHelper(Context context, String name, CursorFactory cursorFactory, int version) { super(context, name, cursorFactory, version); } @Override public void onCreate(SQLiteDatabase db) { // TODO 建立資料庫後,對資料庫的操作 } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO 更改資料庫版本的操作 } @Override public void onOpen(SQLiteDatabase db) { super.onOpen(db); // TODO 每次成功開啟資料庫後首先被執行 } } |
接下來討論具體如何建立表、插入資料、刪除表等等。調用 getReadableDatabase() 或 getWriteableDatabase() 方法,你可以得到 SQLiteDatabase 執行個體,具體調用那個方法,取決於你是否需要改變資料庫的內容:
| 代碼如下 |
複製代碼 |
db=(new DatabaseHelper(getContext())).getWritableDatabase(); return (db == null) ? false : true;
|
上面這段代碼會返回一個 SQLiteDatabase 類的執行個體,使用這個對象,你就可以查詢或者修改資料庫。
當你完成了對資料庫的操作(例如你的 Activity 已經關閉),需要調用 SQLiteDatabase 的 Close() 方法來釋放掉資料庫連接。
android系統下每個程式的資料存放在 /data/data/(package name)/ 目錄下,資料庫則是在/dababases/目錄下..
所以,你只要用FileInputStream讀取原資料庫,再用FileOutputStream把讀取到的東西寫入到那個目錄就可以了..
操作方法:
1. 把原資料庫包括在項目源碼的 res/raw 目錄下.
2.建立一個類來控制database..如下:
代碼
| 代碼如下 |
複製代碼 |
public class DatabaseManager{ private final int BUFFER_SIZE = 400000; public static final String DB_NAME = "myDatabase.db"; //儲存的資料庫檔案名 public static final String PACKAGE_NAME = "com.android.ImportDBTest";//包名 public static final String DB_PATH = "/data" + Environment.getDataDirectory().getAbsolutePath() + "/" + PACKAGE_NAME; //在手機裡存放資料庫的位置 private SQLiteDatabase database; private Context context; DBManager(Context context) { this.context = context; } public void openDatabase() { this.database = this.openDatabase(DB_PATH + "/" + DB_NAME); } private SQLiteDatabase openDatabase(String dbfile) { try { if (!(new File(dbfile).exists())) { //判斷資料庫檔案是否存在,若不存在則執行匯入,否則直接開啟資料庫 InputStream is = this.context.getResources().openRawResource( R.raw.myDatabase); //欲匯入的資料庫 FileOutputStream fos = new FileOutputStream(dbfile); byte[] buffer = new byte[BUFFER_SIZE]; int count = 0; while ((count = is.read(buffer)) > 0) { fos.write(buffer, 0, count); } fos.close(); is.close(); } SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(dbfile, null); return db; } catch (FileNotFoundException e) { Log.e("Database", "File not found"); e.printStackTrace(); } catch (IOException e) { Log.e("Database", "IO exception"); e.printStackTrace(); } return null; } |
然後在需要用到資料庫的時候,用執行個體化一個DatabaseManager類,調用其openDatabase方法就可以返回一個
SQLiteDatabase對象了..如下:
代碼
| 代碼如下 |
複製代碼 |
SQLiteDatabase db = new DBManager(this).openDatabase(); |
這裡只是安卓手機開發的一個角