所以我知道有类似的问题已被问到,但我找不到适合我的确切案例。
我有一个创建数据库并填充它的应用程序,但我的设备上没有root访问权限,所以这是我的问题。我需要使用一些值填充此数据库,然后将其导入我的应用程序/设备。
如果我有root访问权限,我可以直接替换/data/data/com.my.application/databases文件夹中的数据库,但由于我没有root访问权限,我需要能够导入这个数据库我改成了这个位置并替换了标准位置。
任何人都可以帮我一些代码或如何将数据库导入此文件夹的示例吗?我只需要能够导入和替换现有的。
谢谢, 的Wihan
答案 0 :(得分:4)
您可以使用此库在设备上使用导入的数据库:
https://github.com/jgilfelt/android-sqlite-asset-helper
如文档中所述,您只需将数据库文件放在名为databases /assets/databases/database.db
的目录下的assets文件夹中
然后创建一个从SQLiteAssetHelper
扩展的DBHelper类:
public class DBHelper extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "example.db";
private static final int DATABASE_VERSION = 1;
public DBHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
您现在可以通过内容提供商和所有内容访问您的数据。
此外,您可以使用http://sqlitebrowser.org/在计算机上创建预装数据库。
希望它有所帮助。
答案 1 :(得分:0)
public String loadJSONFromAsset(Context context) {
String json = null;
try {
InputStream is = context.getAssets().open("Hospital.db");
int size = is.available();
OutputStream myoutput = new FileOutputStream("/data/data/-----PACKAGE NAME------/databases/Hospital.db");
byte[] buffer = new byte[size];
int length;
while ((length = is.read(buffer)) > 0) {
myoutput.write(buffer, 0, length);
}
//Close the streams
myoutput.flush();
myoutput.close();
is.close();
// byte[] buffer = new byte[size];
// is.read(buffer);
// is.close();
// json = new String(buffer, "UTF-8");
} catch (IOException ex) {
ex.printStackTrace();
return null;
}
return json;
}