Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> Android開發實例 >> [Android]發布Sqlite數據庫

[Android]發布Sqlite數據庫

編輯:Android開發實例

前言
 

  如何將Sqlite數據庫與apk一同發布?剛開始用時有朋友告訴我直接用adb命令手工發布,或者寫sql語句動態創建,感覺不太理想。得益於銀河使者實現基於Android的英文電子詞典這篇文章,再經過文章2的補充以及實踐得以完成,感謝大家的分享!
 

 

文章
 

  1.  實現基於Android的英文電子詞典

  2.  Using your own SQLite database in Android applications
 

  3.  Android Asset,res/raw限制文件大小UNCOMPRESS為1MB

 

 

正文

  一、准備

    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())
            return;

        // 檢測/創建數據庫的文件夾
        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) {
            e.printStackTrace();
        } finally {
            // 關閉輸出流
            try {
                output.flush();
                output.close();
            } catch (IOException e) {
            }
            // 關閉輸入流
            try {
                input.close();
            } catch (IOException e) {
            }
        }
        isInit = true;
    }

    代碼說明:

      a).  在主窗口(Activity)中調用一次即可,隨後直接用SQLiteDatabase.openDatabase操作使用即可。

 

結束
 

   注意文章3,但沒有測試過,不知道後續的版本會不會改進這個數據庫發布的問題。

轉自:http://www.cnblogs.com/over140/archive/2010/08/11/1792482.html

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved