天天看點

[Android]釋出Sqlite資料庫

一、準備

    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操作使用即可。