Android内部使用的是Sqlite数据库,有些app会需要使用这个数据库来存储一些东西。我们可以在代码中创建一个数据库,然后不断的insert进去数据,但这会比较麻烦。所以直接使用图形化工具设计好数据库之后,直接将其拷贝到安卓机器之中比较快速,也免去了不断的数据库操作。
至于db文件的拷贝就直接使用java中的数据流写入即可,下面是操作的代码:
import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
private static String path = "/data/data/com.leafage.dbmanager/databases/test.db";//数据库的位置
private static SQLiteDatabase db;
//打开数据库
public void openDB() {
db = SQLiteDatabase.openOrCreateDatabase(path, null);
}
//关闭数据库
public void closeDB() {
db.close();
}
/***
* 初始化数据库,将assets下的test.db 复制到数据库中
*/
public void initDB(Context context) {
///data/data/packageName/databases/
File mkdir = new File(context.getFilesDir().getParent(), "databases");
//创建 databases文件夹
if (!mkdir.exists()) mkdir.mkdirs();
//数据库文件
File file = new File(mkdir, "test.db");
//只是在程序第一次启动时创建
if (!file.exists()) {
//获取 assets管理
AssetManager assets = context.getAssets();
//执行文件复制
try {
InputStream open = assets.open("test.db");
FileOutputStream fos = new FileOutputStream(file);
byte[] bs = new byte[1024];
int len;
while ((len = open.read(bs)) != -1) {
fos.write(bs, 0, len);
}
fos.flush();
fos.close();
open.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
需要在assets放入相应的db文件,然后使用init方法进行拷贝数据库操作,之后就可以使用open打开数据库的操作对象,就可以直接对数据库进行操作。需要注意的是这里的path是需要改变的,需要写上自己的包名,可以通过context.getFilesDir().getParent()得到程序的包名。