Android导入存在于raw文件夹中的数据库

时间:2021-10-15 08:19:29

新建.db3文件,再导入项目下面的raw文件夹,通过获取资源,将文件映射到/data/data/包名/下,再获取sqlitedatabase对象操作数据库。

在Android中,当在代码中建立数据库文件,默认存放位置是在/data/data/包名/数据库文件名,我们可以把已经在本地存在的数据库文件放在项目下的raw中,在raw目录下的资源是不会被压缩的,可以随着apk一起发布,那么如果我们在raw目录下面放了一个数据的文件,如何来使用它呢?

首先在默认目录下建立一个空的数据库文件,假设文件叫abc.db3,那接下来就要获取这个文件的输入流。在到我们的raw目录下找到存放的数据库文件,假设叫做mydatabase.db3,那么就可以根据文件获取它的输出流,结合流的写入和读出,就可以把我们放在raw目录下的数据库文件导入到默认目录,接下来就可以获取相应的SQLiteDatabase类进行使用了。

关键代码如下:

String dirPath="/data/data/com.example.lin.dbtest/databases";
File dir = new File(dirPath);
if(!dir.exists()) {
dir.mkdir();
}
//数据库文件
File file = new File(dir, "abc.db3");
try {
if(!file.exists()) {
file.createNewFile();
}

创建目录,新建一个名为abc.db3的数据文件

InputStream is = this.getApplicationContext().getResources().openRawResource(R.raw.mydatabase.db3);
FileOutputStream fos = new FileOutputStream(file);
byte[] buffere=new byte[is.available()];
is.read(buffere);
fos.write(buffere);
is.close();
fos.close();

获取SQLiteDatabase对象

SQLiteDatabase db = SQLiteDatabase.OpenOrCreate("数据库路径",factory);