目录

引用外部数据库(sqlite)

1.将.db文件放入/res/raw文件夹下,没有raw文件夹则新建(New/Floder/Raw Resources Floder)

2.新建DbManager类

写入以下代码

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
public class DbManager {
    private static final String DB_NAME = "data1.db";//文件名,自己修改
    private static final String PACKAGE_NAME = "com.example.aaaaaa.test";//包名,自己修改
    private static final String DB_PATH = "/data" + Environment.getDataDirectory().getAbsolutePath() + "/" + PACKAGE_NAME+ "/databases";   //存放路径( /data/data/com.*.*(package name)/database)
    private SQLiteDatabase db;
    private Context context;
    DbManager(Context context) {
        this.context = context;
    }
    //对外提供的打开数据库接口
    public void openDataBase() {
        this.db = this.openDataBase(DB_PATH + "/" + DB_NAME);
    }
    //获取打开后的数据库
    public SQLiteDatabase getDb() {
        return this.db;
    }
    // 本地打开数据方法
    private SQLiteDatabase openDataBase(String filePath) {
        try {
            File myDataPath = new File(DB_PATH);
            if (!myDataPath.exists()) {
                myDataPath.mkdirs();// 假设没有这个文件夹,则创建
            }
            if (!(new File(filePath).exists())) {// 推断数据库文件是否存在,若不存在则运行导入,存在则直接打开数据库
                InputStream is = context.getResources().openRawResource(R.raw.data1);
                FileOutputStream fos = new FileOutputStream(filePath);
                int BUFFER_SIZE = 400000;
                byte[] buffer = new byte[BUFFER_SIZE];
                int readCount;
                while((readCount = is.read(buffer))>0){
                    fos.write(buffer,0,readCount);
                }
                fos.close();
                is.close();
            }
            //打开数据库
            SQLiteDatabase db = SQLiteDatabase.openOrCreateDatabase(filePath,null);
            return db;
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
        return null;
    }
    //关闭数据库
    public  void closeDataBase() {
        if(this.db!=null)db.close();
    }
}

3.在AndroidManifest.xml添加读写权限

1
2
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

4.在启动页的onCreate函数中加入:

1
2
DbManager manager = new DbManager(MainActivity.this);
manager.openDataBase();

手机usb调试,在 /data/data/com..(package name)/database路径中即可找到数据库文件。

注1:没有执行query函数,Dbmanager中部分函数会提示没有被调用,无影响。