今天调试遇到一个问题,将assets下的db数据库文件安装后,在data/data/package/databases下面只有该db文件,但是文件内容为空。
原因是:data/data/package/databases下的文件只是一个映射。当android需要自带数据时,我们一般习惯放在data/data/package/databases下,这是因为android程序文件中的数据库文件都默认存放在data/data/package/databases目录下。
当我们需要把数据库文件存放在内存卡中,就要在asset中放置一个db库文件 ,每次安装的时候要把这个asset库中的数据写入到内存下的库文件中。
File file = getDatabasePath("a.db");
if (!file.exists()) {
file.getParentFile().mkdirs();
try {
InputStream is = getAssets().open("a.db");
//InputStream is = getApplicationContext().getResources().openRawResource(R.raw.smdd);
FileOutputStream fos = new FileOutputStream(file);
byte[] buffer = new byte[1024];
int count = 0;
while ((count=is.read(buffer))!=-1) {
fos.write(buffer,0,count);
}
fos.close();
is.close();
} catch (Exception e) {
e.printStackTrace();
}
}
存放在assets下,可以允许你直接通过assets文件夹下的数据库名称来获取SQLiteDatabase对象。