一、準備
1.1 準備目錄
在Android項目工程res下建立raw檔案夾,在這個檔案夾裡面的檔案不會被編譯壓縮。
1.2 準備資料庫
建立或拷貝一個資料庫,然後打開,依次執行以下兩條SQL語句:
CREATE TABLE "android_metadata" ("locale" TEXT DEFAULT 'zh_CN')
INSERT INTO "android_metadata" VALUES ('zh_CN')
這個表用途不太清楚,但是如果用Android sqlite API建立一個資料庫的話,會預設帶上這個表,而且少了還不行,會報錯。
二、實作代碼
/**
* 是否完成初始化
*/
private static boolean isInit = false;
* 初始化資料庫
* @param context
synchronized public static void init(Context context)
{
if(isInit)
return;
// 輸出路徑
String outFileName = DATABASE_PATH + DATABASE_NAME;
//檢測是否已經建立
File dir = new File(outFileName);
if(dir.exists())
// 檢測/建立資料庫的檔案夾
dir = new File(DATABASE_PATH);
if (!dir.exists())
dir.mkdir();
InputStream input = null;
OutputStream output = null;
// 從資源中讀取資料庫流
input = context.getResources().openRawResource(R.raw.db);
try {
output = new FileOutputStream(outFileName);
// 拷貝到輸出流
byte[] buffer = new byte[2048];
int length;
while ((length = input.read(buffer)) > 0) {
output.write(buffer, 0, length);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
} finally {
// 關閉輸出流
try {
output.flush();
output.close();
} catch (IOException e) {
// 關閉輸入流
input.close();
}
isInit = true;
}
代碼說明:
a). 在主視窗(Activity)中調用一次即可,随後直接用SQLiteDatabase.openDatabase操作使用即可。