Android 使用外部db數(shù)據(jù)庫文件

先簡單說下步驟:

1.將格式為.db的數(shù)據(jù)庫文件放到android項目assets目錄中跛璧;

2.在程序必要的時候,將其“拷貝”(文件讀饶环)到Android 程序默認的數(shù)據(jù)庫存儲目錄中,一般路徑為“/data/data/項目包名/databases/“;

3.自定義SQLiteOpenHelper類各薇,創(chuàng)建一個名字跟步驟1中.db名稱一樣的數(shù)據(jù)庫;

4.按照平常邏輯君躺,增刪改查數(shù)據(jù)庫峭判。

步驟1:如下圖,將數(shù)據(jù)庫文件copy到assets目錄中


image.png

步驟2:將db文件讀取拷貝到databases目錄中棕叫,代碼如下:

package com.kinth.youdian.activity.boti.util;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;

import android.annotation.SuppressLint;
import android.content.Context;

/**
 * 將assets中的db文件拷貝到databases中
 * @author Botision.Huang
 * @Date: 2015-8-18 下午4:11:24
 * @Descp: TODO
 */
public class DatabaseUtil {

    @SuppressLint("SdCardPath")
    public static void packDataBase(Context context){
        // com.kinth.youdian 是程序的包名林螃,請根據(jù)自己的程序調(diào)整
        // /data/data/com.kinth.youdian/databases目錄是準備放 SQLite 數(shù)據(jù)庫的地方,也是 Android 程序默認的數(shù)據(jù)庫存儲目錄
        // 數(shù)據(jù)庫名為 db_youdian.db 
        String DB_PATH = "/data/data/com.kinth.youdian/databases/";
        String DB_NAME = "db_youdian.db";

        // 檢查 SQLite 數(shù)據(jù)庫文件是否存在 
        if (!(new File(DB_PATH + DB_NAME)).exists()) {
            // 如 SQLite 數(shù)據(jù)庫文件不存在俺泣,再檢查一下 database 目錄是否存在
            File f = new File(DB_PATH);
            // 如 database 目錄不存在疗认,新建該目錄
            if (!f.exists()) {
                f.mkdir();
            }

            try {
                // 得到 assets 目錄下我們實現(xiàn)準備好的 SQLite 數(shù)據(jù)庫作為輸入流
                InputStream is = context.getAssets().open(DB_NAME);
                // 輸出流,在指定路徑下生成db文件
                OutputStream os = new FileOutputStream(DB_PATH + DB_NAME);

                // 文件寫入
                byte[] buffer = new byte[1024];
                int length;
                while ((length = is.read(buffer)) > 0) {
                    os.write(buffer, 0, length);
                }

                // 關(guān)閉文件流
                os.flush();
                os.close();
                is.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}

步驟3:代碼如下

package com.kinth.youdian.activity.boti.dbdao;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

/**
 * 【省市區(qū)】數(shù)據(jù)庫幫助類
 * @author Botision.Huang
 * @Date: 2015-8-18 下午4:21:33
 * @Descp: TODO
 */
public class ProvinceDataHelper extends SQLiteOpenHelper {
    private static final String DATABASE_NAME = "db_youdian.db";
    private static final int DATABASE_VERSION = 1;

    /** Create a helper object for the Events database */
    public ProvinceDataHelper(Context ctx) {
        super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {}

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}
}

步驟4:做完以上3個步驟之后,下面我們就可以按照正常邏輯伏钠,去操作數(shù)據(jù)庫啦横漏,譬如下代碼:

package com.kinth.youdian.activity.boti.dbdao;

import java.util.ArrayList;
import java.util.List;

import com.kinth.youdian.activity.boti.dbdao.bean.ProvinceBean;

import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

public class ProvinceDao {

    private ProvinceDataHelper helper;
    private SQLiteDatabase db = null;

    public ProvinceDao(Context mContext){
        helper = new ProvinceDataHelper(mContext);
    }

    /**
     * 從本地數(shù)據(jù)庫獲取省份列表
     * @return
     */
    public List<ProvinceBean> getProvinceList(){
        List<ProvinceBean> proList = new ArrayList<ProvinceBean>();
        try{
            db = helper.getReadableDatabase();

            Cursor cursor = db.rawQuery("select * from province", null);
            if(null != cursor){
                while(cursor.moveToNext()){
                    int id = cursor.getInt(cursor.getColumnIndex("id"));
                    String name = cursor.getString(cursor.getColumnIndex("name"));
                    ProvinceBean bean = new ProvinceBean();
                    bean.setId(id);
                    bean.setName(name);

                    proList.add(bean);
                }
            }
            cursor.close();
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            if(null != db){
                db.close();
            }
        }
        return proList;
    }
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市熟掂,隨后出現(xiàn)的幾起案子缎浇,更是在濱河造成了極大的恐慌,老刑警劉巖赴肚,帶你破解...
    沈念sama閱讀 212,718評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件素跺,死亡現(xiàn)場離奇詭異,居然都是意外死亡尊蚁,警方通過查閱死者的電腦和手機亡笑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,683評論 3 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來横朋,“玉大人仑乌,你說我怎么就攤上這事∏俣В” “怎么了晰甚?”我有些...
    開封第一講書人閱讀 158,207評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長决帖。 經(jīng)常有香客問我厕九,道長,這世上最難降的妖魔是什么地回? 我笑而不...
    開封第一講書人閱讀 56,755評論 1 284
  • 正文 為了忘掉前任扁远,我火速辦了婚禮俊鱼,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘畅买。我一直安慰自己并闲,他們只是感情好,可當我...
    茶點故事閱讀 65,862評論 6 386
  • 文/花漫 我一把揭開白布谷羞。 她就那樣靜靜地躺著帝火,像睡著了一般。 火紅的嫁衣襯著肌膚如雪湃缎。 梳的紋絲不亂的頭發(fā)上犀填,一...
    開封第一講書人閱讀 50,050評論 1 291
  • 那天,我揣著相機與錄音嗓违,去河邊找鬼九巡。 笑死,一個胖子當著我的面吹牛蹂季,可吹牛的內(nèi)容都是我干的比庄。 我是一名探鬼主播,決...
    沈念sama閱讀 39,136評論 3 410
  • 文/蒼蘭香墨 我猛地睜開眼乏盐,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了制恍?” 一聲冷哼從身側(cè)響起父能,我...
    開封第一講書人閱讀 37,882評論 0 268
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎净神,沒想到半個月后何吝,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,330評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡鹃唯,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,651評論 2 327
  • 正文 我和宋清朗相戀三年爱榕,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坡慌。...
    茶點故事閱讀 38,789評論 1 341
  • 序言:一個原本活蹦亂跳的男人離奇死亡黔酥,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出洪橘,到底是詐尸還是另有隱情跪者,我是刑警寧澤,帶...
    沈念sama閱讀 34,477評論 4 333
  • 正文 年R本政府宣布熄求,位于F島的核電站渣玲,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏弟晚。R本人自食惡果不足惜忘衍,卻給世界環(huán)境...
    茶點故事閱讀 40,135評論 3 317
  • 文/蒙蒙 一逾苫、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧枚钓,春花似錦铅搓、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,864評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至指煎,卻和暖如春蹋偏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背至壤。 一陣腳步聲響...
    開封第一講書人閱讀 32,099評論 1 267
  • 我被黑心中介騙來泰國打工威始, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人像街。 一個月前我還...
    沈念sama閱讀 46,598評論 2 362
  • 正文 我出身青樓黎棠,卻偏偏與公主長得像,于是被迫代替她去往敵國和親镰绎。 傳聞我的和親對象是個殘疾皇子脓斩,可洞房花燭夜當晚...
    茶點故事閱讀 43,697評論 2 351

推薦閱讀更多精彩內(nèi)容