我有一个SQLite数据库,我想在我的Android应用程序中使用。Android和SQLite,读取数据库的设备出错
首先,我从资产复制我的数据库/数据/数据//数据库/使用:
private void copyDBFromAsssetsToDataFolder()
{
try
{
String destPath = "/data/data/" + getPackageName() + "/databases/dbname.db";
File f = new File(destPath);
if(!f.exists())
{
Log.v("TAG","File Not Exist");
InputStream in = getAssets().open("dbname.db");
OutputStream out = new FileOutputStream(destPath);
byte[] buffer = new byte[1024];
int length;
while ((length = in.read(buffer)) > 0)
{
out.write(buffer, 0, length);
}
in.close();
out.close();
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
Log.v("TAG","ioexeption");
e.printStackTrace();
}}
我所有的查询工作正常在模拟器,但在设备中我收到:
错误打开目录:/ data/data/packagename/databases/
这里,我正在阅读具有相同问题的人,并且解决方案始终将权限分配给此目录或将数据库复制到外部存储。但在制作过程中,用户不必拥有SD卡,也不必强制用户为数据库(或其他)目录分配权限。
使用已创建的数据库的最佳解决方案是什么?
为什么不使用'File file = Context.getDatabasePath(“name_of_db”);'(而不是硬编码文件路径),那么如果文件不存在'file.mkdirs();'然后复制从资产? – Selvin 2013-04-10 10:48:29
已经提出了类似的问题。有用的阅读:http://stackoverflow.com/questions/513084/how-to-ship-an-android-application-with-a-database,和http://stackoverflow.com/questions/9109438/how-to-使用-的现有数据库与 - 的 - Android的应用程序 – 2013-04-10 10:55:25
包已经被写入,以帮助管理数据库:https://github.com/jgilfelt/android-sqlite-asset-helper – 2013-04-10 10:56:27