我们在写一个项目的时候,可能需要一些原始数据,用来app查询数据。这儿有一个内置数据库文件的类,来实现原始数据查询。首先得先有一个原始数据的.db文件。我们可以通过使用SQLite expert工具来创建一个数据库文件。然后将数据库文件放在android项目的assets文件夹下。在使用下面这个类,就能实现我们需要的功能了。
package com.zwinsoft.voice.tool;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import android.content.Context;
import android.content.res.AssetManager;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
/**
* 这个类就是实现从assets目录读取数据库文件然后写入SDcard中,
* 如果在SDcard中存在,就打开数据库,不存在就从assets目录下复制过去
* @author wangjian
*
*/
public class SQLiteDbManager {
//数据库存储路径
String filePath = "data/data/com.zwinsoft.voice/Voice_2.db";
// 数据库存放的文件夹 data/data/com.zwinsoft.voice 下面
String pathStr = "data/data/com.zwinsoft.voice";
SQLiteDatabase database;
public SQLiteDatabase openDatabase(Context context) {
System.out.println("filePath:" + filePath);
File jhPath = new File(filePath);
// 查看数据库文件是否存在
if (jhPath.exists()) {
Log.i("Voice", "存在数据库");
// 存在则直接返回打开的数据库
return SQLiteDatabase.openOrCreateDatabase(jhPath, null);
} else {
// 不存在先创建文件夹
File path = new File(pathStr);
Log.i("Voice", "pathStr=" + path);
if (path.mkdir()) {
Log.i("Voice", "创建成功");
} else {
Log.i("Voice", "创建失败");
}
try {
// 得到资源
AssetManager am = context.getAssets();
// 得到数据库的输入流
InputStream is = am.open("Voice_2.db");
Log.i("Voice", is + "");
// 用输出流写到SDcard上面
FileOutputStream fos = new FileOutputStream(jhPath);
Log.i("Voice", "fos=" + fos);
Log.i("Voice", "jhPath=" + jhPath);
// 创建byte数组 用于1KB写一次
byte[] buffer = new byte[1024];
int count = 0;
while ((count = is.read(buffer)) > 0) {
Log.i("Voice", "得到");
fos.write(buffer, 0, count);
}
// 最后关闭就可以了
fos.flush();
fos.close();
is.close();
} catch (IOException e) {
e.printStackTrace();
return null;
}
// 如果没有这个数据库 我们已经把他写到SD卡上了,然后在执行一次这个方法 就可以返回数据库了
return openDatabase(context);
}
}
}
调用openDatabase()方法就可以返回一个SQLiteDatabase。