Android 引用外部數(shù)據(jù)庫(kù)(一)

有現(xiàn)成的數(shù)據(jù)庫(kù),需要直接引入到項(xiàng)目中使用。

#準(zhǔn)備

在開(kāi)始之前我們要確認(rèn)現(xiàn)有的數(shù)據(jù)庫(kù)的表結(jié)構(gòu)和字段信息等。(注意要看清楚數(shù)據(jù)庫(kù)的大小,后面有用)

#第一步

將外部數(shù)據(jù)庫(kù)拷貝到項(xiàng)目中的 assets文件夾中,如圖

#第二步

在你要使用數(shù)據(jù)庫(kù)之前將數(shù)據(jù)庫(kù)拷貝到 /data/data/包名/databases/ 目錄下。
通過(guò)獲取數(shù)據(jù)庫(kù)的大小判斷一下是否已經(jīng)拷貝完成。

代碼

public static void copyDbFile(Context context, String db_name) {
    InputStream in = null;
    FileOutputStream out = null;
    //String path = "/data/data/" + context.getPackageName() + "/databases/";
    File filePath = context.getDatabasePath(db_name);
    //spUtils 是為了防止多次拷貝
    if (!SharePreferenceUtils.getBoolean(GlobalContent.COPE_SUCCESS,false)){
        try {
            in = context.getAssets().open(db_name); // 從assets目錄下復(fù)制
            out = new FileOutputStream(filePath);
            int length = -1;
            byte[] buf = new byte[1024];
            while ((length = in.read(buf)) != -1) {
                out.write(buf, 0, length);
            }
            out.flush();
            SharePreferenceUtils.putBoolean(GlobalContent.COPE_SUCCESS,true);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (in != null) in.close();
                if (out != null) out.close();
            } catch (IOException e1) {
                e1.printStackTrace();
            }
        }
    }
}

#第三步

這時(shí)就可以開(kāi)始查庫(kù)了

SqlLiteHelper sqlLiteHelper = new SqlLiteHelper(getContext(), "mySql.db", null, 1);
SQLiteDatabase readableDatabase = sqlLiteHelper.getReadableDatabase();

try {
        Cursor query = readableDatabase.query("message", new String[]{"_id", "message"}, null, null, null, null, null, limit);
        boolean b = query.moveToFirst();
        while (!query.isLast()) {
            int id = query.getInt(query.getColumnIndex("_id"));
            String message = query.getString(query.getColumnIndex("message"));
            mDataList.add(new LoveMessageBean(id, message));
            query.moveToNext();
        }
        query.close();
        Logger.i("mDataList : "+ mDataList.size());
    }catch (Exception e){
        UiUtils.showToast(getContext(),"error");
    }

到這里已經(jīng)成功的把外部數(shù)據(jù)庫(kù)拷貝到項(xiàng)目中,并且開(kāi)始 CRUD 了。
以上的方法,是做簡(jiǎn)單也是最原始的方法,之后會(huì)嘗試使用第三方的工具來(lái)查詢,如 GreenDao LitePal 等。

在Android開(kāi)發(fā)中使用數(shù)據(jù)庫(kù)進(jìn)行存儲(chǔ)查詢等操作是基本功,推薦可以看看以下文章:

  1. 郭神的LitePal 系列文章 Android數(shù)據(jù)庫(kù)高手秘籍
  2. Android 數(shù)據(jù)庫(kù)對(duì)比 傳送門(mén)

查看數(shù)據(jù)庫(kù)的工具:Sqlitebrowser
下載地址

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 179,283評(píng)論 25 708
  • 空調(diào)屋里坐,雪糕嘴上叼。 躺臥自隨便,電視更換頻。 零食堆如山,健身不可缺。 能知今日福,憐惜萬(wàn)年何?
    華客魯俊閱讀 233評(píng)論 0 3
  • “感謝讓我遇見(jiàn)你?!?“假如沒(méi)有遇見(jiàn)我會(huì)怎樣?”,閑聊時(shí),她發(fā)出了這樣的提問(wèn)。 我也一時(shí)語(yǔ)塞,文不對(duì)題答道: “就...
    不隨便雪糕閱讀 268評(píng)論 0 0
  • 1 梅子是個(gè)能力很強(qiáng)的女孩,從十四歲開(kāi)始就自己打工賺錢(qián)零花,大學(xué)里所有的費(fèi)用,都是自己做生意賺的。 只可...
    曾素妍閱讀 435評(píng)論 4 6
  • 衡關(guān)飛騏駿,將送故人行。 胡鯉隨葉橫的隊(duì)伍行軍,途中因風(fēng)寒而體力不支,伏在葉橫手下兵士背上走了一程。梧姑娘兀自為他...
    漪付閱讀 317評(píng)論 2 4

友情鏈接更多精彩內(nèi)容