上篇文章讲的是用DatabaseHelper新建一个数据库再进行增删改查,但大多数情景是数据库已经存在了,那怎么去访问呢?思路是先判断data/data/<package_name>/databases目录下数据库是否存在,如果不存在,用流操作把res/raw或assets目录下的数据库拷贝到data/data/<package_name>/databases目录,接下来就跟新建完数据库一样一样了。
核心代码
private void getData(){
final String DATABASE_PATH="data/data/"+ this.getPackageName() + "/databases/";
String databaseFile=DATABASE_PATH+"mydb.db";
//创建databases目录(不存在时)
File file=new File(DATABASE_PATH);
if(!file.exists()){
file.mkdirs();
}
//判断数据库是否存在
if (!new File(databaseFile).exists()) {
//把数据库拷贝到/data/data/<package_name>/databases目录下
try {
FileOutputStream fileOutputStream = new FileOutputStream(databaseFile);
//数据库放assets目录下
//InputStream inputStream = getAssets().open("mydb.db");
//数据库方res/rew目录下
InputStream inputStream=getResources().openRawResource(R.raw.mydb);
byte[] buffer = new byte[1024];
int readBytes = 0;
while ((readBytes = inputStream.read(buffer)) != -1)
fileOutputStream.write(buffer, 0, readBytes);
inputStream.close();
fileOutputStream.close();
} catch (IOException e) {
}
}
db = SQLiteDatabase.openOrCreateDatabase(databaseFile, null);
}