[Android]发布Sqlite数据库
前言
如何將Sqlite數據庫與apk一同發布?剛開始用時有朋友告訴我直接用adb命令手工發布,或者寫sql語句動態創建,感覺不太理想。得益于銀河使者的實現基于Android的英文電子詞典這篇文章,再經過文章2的補充以及實踐得以完成,感謝大家的分享!
文章
1. 實現基于Android的英文電子詞典
2. Using your own SQLite database in Android applications
3. Android Asset,res/raw限制文件大小UNCOMPRESS為1MB
聲明
歡迎轉載,但請保留文章原始出處:)
博客園:http://www.cnblogs.com
農民伯伯: http://www.cnblogs.com/over140/??
正文
一、準備
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,但沒有測試過,不知道后續的版本會不會改進這個數據庫發布的問題。
轉載于:https://www.cnblogs.com/bmate/archive/2012/09/05/2672020.html
總結
以上是生活随笔為你收集整理的[Android]发布Sqlite数据库的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: lic文件怎么打开
- 下一篇: android sina oauth2.