我有一个SQLite数据库,我想在我的Android应用程序中使用。
首先,我将数据库从Assets复制到/ data / data // databases / using:
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卡,或者您无法强制用户为数据库(或其他)目录分配权限。
使用已创建的数据库的最佳解决方案是什么?
答案 0 :(得分:0)
首先必须在/ data / data / packagename中创建目录“databases”。
答案 1 :(得分:0)
使用@Selvin建议我没有问题。
文件file = Context.getDatabasePath(“name_of_db”);
如果文件不存在,则为file.mkdirs();