前言
在开发的过程中,我们有时会遇到这种情况:
你在建立本地数据库的时候需要用到一个db文件中的数据,那么怎么处理呢?
你需要:
- 将db文件复制到自己的项目中
- 将db文件中的数据拷贝到自己的sqlite中(会涉及到自定义数据库路径的讲解)
下面就来具体的讲解:
一.将db文件复制到自己的项目中
db文件一般拷贝到自己项目的 assets 文件夹下,如果没有assets文件夹,那么新建的话可以参考我的这篇文章
Android studio 添加assets文件夹
好了,现在在你项目中已经有db文件了,接下来就是拷贝数据建自己的数据库了
二. 将db文件中的数据拷贝到自己的sqlite中
写一个DBManager类,代码如下:
/**
* Instruction:复制assets文件夹下db文件
*
* Author:pei
* Date: 2017/6/27
* Description:
*/
public class DBManager {
private static final String ASSETS_DB_NAME = "order_form.db";//assets文件夹下数据库文件名
//复制数据库相关
private final String CREAGTE_DB_NAME = "user.db";//复制到手机中的数据库文件名
private final String DB_PATH="/data/data/%s/databases/";//数据库文件夹路径
private DBManager() {}
private static class DbHolder {
private static DBManager instance = new DBManager();
}
public static DBManager getInstance() {
return DbHolder.instance;
}
/**获取sqlite数据库对象**/
public SQLiteDatabase getDataBase() {
String packageName=AppUtil.getPackageName();
String dbDirPath=String.format(DB_PATH, packageName);
String dbFilePath=String.format(DB_PATH+CREAGTE_DB_NAME, packageName);
if(FileUtil.isSdcardExist()) {
FileUtil.createDirFile(dbDirPath);//db文件夹不存在则创建
if(!FileUtil.isFileExist(dbFilePath)){//db文件不存在则从assets复制
try {
FileOutputStream out = new FileOutputStream(dbFilePath);
InputStream in = AppContext.getInstance().getAssets().open(ASSETS_DB_NAME);
byte[] buffer = new byte[1024];
int readBytes = 0;
while ((readBytes = in.read(buffer)) != -1){
out.write(buffer, 0, readBytes);
}
out.flush();
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
return SQLiteDatabase.openOrCreateDatabase(dbFilePath, null);
}
/**
* 关闭sqlite数据数据库
*/
public void closeDataBase(){
SQLiteDatabase dataBase= getDataBase();
if(dataBase!=null){
dataBase.close();
}
}
}
下面来看看getDataBase()中的这行代码:
return SQLiteDatabase.openOrCreateDatabase(dbFilePath, null);
当 dbFilePath为 CREAGTE_DB_NAME(CREAGTE_DB_NAME = "user.db")时,即:
SQLiteDatabase.openOrCreateDatabase("user.db", null);
表示数据创建为默认地址
当 dbFilePath为自定义路径,如 dbFilePath="/data/data/op/file/user.db",即:
String dbFilePath="/data/data/op/file/user.db"
SQLiteDatabase.openOrCreateDatabase(dbFilePath, null);
表示数据库创建为自定义地址,这里需要注意的是dbFilePath需要以"/"开头,若
String dbFilePath="data/data/op/file/user.db"
SQLiteDatabase.openOrCreateDatabase(dbFilePath, null);
运行时是会报错的
最后,当然是要添加读写权限了
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
android7.0读写权限也是要添加的,这里就不做讲解了
OK,今天的讲解就到这里了,谢谢大家。