sqlite3数据库导入到Android项目中
第一步:将数据库文件放入到assets目录中。注意Androidstudio需要将assets目录建在main项目下。即和Java,res等文件夹是同级的。
1.assets:不会在R.java文件下生成相应的标记,assets文件夹可以自己创建文件夹,必须使用AssetsManager类进行访问,存放到这里的资源在运行打包的时候都会打入程序安装包中,
2.res:会在R.java文件下生成标记,这里的资源会在运行打包操作的时候判断哪些被使用到了,没有被使用到的文件资源是不会打包到安装包中的。
res/raw和assets文件夹来存放不需要系统编译成二进制的文件,例如字体文件等
在res文件夹下还可以定义一下目录:
res/anim:这里存放的是动画资源。
res/xml:可以在Activity中使用getResource().getXML()读取这里的资源文件
res/raw:该目录下的文件可以直接复制到设备上,不能有子文件夹,编译软件时,这里的数据不需要编译,直接加入到程序安装包中,使用方法是getResource().OpenRawResources(ID),其中参数ID的形式是R.raw.XXX.
第二步:首次使用app,将assets目录下的数据库文件加载到android手机的sd下。
1、
private void initDB() {
//1,归属地数据拷贝过程
initAddressDB("address.db");
}
2、
/**
* 拷贝数据库值files文件夹下
* @param dbName 数据库名称
*/
private void initAddressDB(String dbName) {
//1,在files文件夹下创建同名dbName数据库文件过程
File files = getFilesDir();
File file = new File(files, dbName);
if(file.exists()){
return;
}
InputStream stream = null;
FileOutputStream fos = null;
//2,输入流读取第三方资产目录下的文件
try {
stream = getAssets().open(dbName);
//3,将读取的内容写入到指定文件夹的文件中去
fos = new FileOutputStream(file);
//4,每次的读取内容大小
byte[] bs = new byte[1024];
int temp = -1;
while( (temp = stream.read(bs))!=-1){
fos.write(bs, 0, temp);
}
} catch (Exception e) {
e.printStackTrace();
}finally{
if(stream!=null && fos!=null){
try {
stream.close();
fos.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}