android下访问已存在的sqlite数据库文件的办法
大部分android的开发书籍中都会详细的说明如何利用代码创建sqlite数据库,然后访问数据库。可实际的应用中数据库往往数据库已经新建好,并且已经导入原始数据。当然这些工作可以通过SQLiteOpenHelper.onCreate方法在操作数据库前完成,但一定程度上会影响数据访问的速度。
本文提供两种办法将已建好的数据库上传至/data/data/<package name>/database目录下,此目录是android应用程序访问数据库的默认目录。
【方法一】 仅仅限于模拟器使用
在Eclipse中执行【Window】-【Show View】-【other】-【File Explorer】操作,界面会显示模拟器的文件目录,通过树形结构找到/data/data/<package
name>/database目录,点击右上角的【Pull a file from the device】图标,选择要上传的数据库即可。
【方法二】 将数据库放到res/raw目录下,在第一次数据访问数据库时拷贝纸/data/data/<package name>/database目录下,拷贝的代码如下:
public static SQLiteDatabase openDatabase(Context context) {
try {
// 获得文件的绝对路径
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
if (!dir.exists()) {
dir.mkdir();
};
if (!(new File(databaseFilename)).exists()) {
InputStream is = context.getResources().openRawResource(R.raw.dbname);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
// 开始复制文件
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
} catch (Exception e) {
Log.i("open error", e.getMessage());
}
return null;
}
本文提供两种办法将已建好的数据库上传至/data/data/<package name>/database目录下,此目录是android应用程序访问数据库的默认目录。
【方法一】 仅仅限于模拟器使用
在Eclipse中执行【Window】-【Show View】-【other】-【File Explorer】操作,界面会显示模拟器的文件目录,通过树形结构找到/data/data/<package
name>/database目录,点击右上角的【Pull a file from the device】图标,选择要上传的数据库即可。
【方法二】 将数据库放到res/raw目录下,在第一次数据访问数据库时拷贝纸/data/data/<package name>/database目录下,拷贝的代码如下:
public static SQLiteDatabase openDatabase(Context context) {
try {
// 获得文件的绝对路径
String databaseFilename = DATABASE_PATH + "/" + DATABASE_FILENAME;
File dir = new File(DATABASE_PATH);
if (!dir.exists()) {
dir.mkdir();
};
if (!(new File(databaseFilename)).exists()) {
InputStream is = context.getResources().openRawResource(R.raw.dbname);
FileOutputStream fos = new FileOutputStream(databaseFilename);
byte[] buffer = new byte[8192];
int count = 0;
// 开始复制文件
while ((count = is.read(buffer)) > 0) {
fos.write(buffer, 0, count);
}
fos.close();
is.close();
}
SQLiteDatabase database = SQLiteDatabase.openOrCreateDatabase(databaseFilename, null);
return database;
} catch (Exception e) {
Log.i("open error", e.getMessage());
}
return null;
}