思路:
将写好的 xxx.db 文件放入 assets 或 raw 文件夹,这两个文件夹在打包时不会被压缩
在第一次打开程序时将 xxx.db文件复制到 /data/data/包名/database/xxx.db
包名用context.getPackageName()获取
InputStream的两种获取方式为:
1. InputStream inputStream=context.getAssets().open(dbName);
//数据库文件存于assets下
2.InputStream is=context.getResources().openRawResource(R.raw.dbName);
//数据库文件存于raw下
public class MoveSQLiteUtil {
public static void move(Context context){
String path="/data/data/"+ context.getPackageName()+"/databases/";
String dbName="xxx.db";
if(new File(context.getAssets().toString(),dbName).exists()){
Log.d("OK","源文件不存在");
return;
}
File file=new File(path+dbName);
if(!file.exists()){
//不存在
File dir=new File(path);
if(!dir.exists()){
//文件夹不存在
dir.mkdir();
Log.d("OK","创建文件夹");
}
try {
InputStream inputStream=context.getAssets().open(dbName);
//InputStream inputStream =context.getResources().openRawResource(R.raw.dbName);
OutputStream outputStream=new FileOutputStream(file);
if(file.exists()){
Log.d("OK","收件文件创建成功");
}
else {
Log.d("OK","收件文件创建失败");
}
byte[] buffer = new byte[1024];
int length;
while ((length = inputStream.read(buffer)) > 0) {
outputStream.write(buffer, 0, length);
}
// 关闭文件流
outputStream.flush();
outputStream.close();
inputStream.close();
} catch (IOException e) {
throw new RuntimeException(e);
}
Log.d("OK","数据库复制成功");
}
else {
//存在
Log.d("OK","数据库存在");
}
}
}
注意:
1.创建MySQLiteOpenHelper要将数据库名换为 xxx.db
public MySQLiteOpenHelper(Context context) {
super(context,"xxx.db",null,2);
}
2.查询后得到Cursor,读取前要先移动指针
cursor.moveToNext(); 第一次读取结果也要移动指针