我正在使用Ormlite来保存我的Android应用程序中的一些数据(在Motorola Xoom上运行)。默认情况下,sql数据库保存到/ data / data / [package name] / databases / [dbname] .db。麻烦的是,Xoom没有root,因此用户无权访问保存db的目录(无法复制/备份/编辑db的内容)。
我在其中一个类中添加了一些额外的代码,用于将数据库从/ data复制到SD卡,这很好,但实际上我认为应该可以设置数据库存储位置的路径。我错过了什么,或者Ormlite无法做到这一点?
提前致谢, ç
答案 0 :(得分:6)
如果使用
之类的东西,可以在SDCard上创建数据库public class DatabaseHelper extends OrmLiteSqliteOpenHelper {
[...]
public DatabaseHelper(final Context context) {
super(context, Environment.getExternalStorageDirectory().getAbsolutePath()
+ File.separator + DATABASE_NAME, null, DATABASE_VERSION);
}
这将在例如: /mnt/sdcard/Android/data/com.your.app/files/myData.sqlite Pro:保存内存 Con:当SDCard不可用时无法访问数据库(例如,当它连接到PC时) 此外,任何可能是赞成或反对的人都可以阅读。
使用context.getExternalFilesDir()而不是Environment.getExternalStorageDirectory()将使用特定于您的应用的位置,并在卸载后自动清理(在应用更新时也显示在2.2上)。
P.S。我在某处读过这种方法可能不适用于2.2(?)
之前的Android版本答案 1 :(得分:2)
你可以做https://stackoverflow.com/a/3911641中的人所做的事。
当您创建将执行db事务的对象时,将覆盖getReadableDatabase和getWriteableDatabase以使用您的自定义路径。像这样的事情:
@Override
public synchronized SQLiteDatabase getWritableDatabase (){
return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READWRITE);
}
@Override
public synchronized SQLiteDatabase getReadableDatabase (){
return SQLiteDatabase.openDatabase("/sdcard/mydatabase.db", null, SQLiteDatabase.OPEN_READONLY);
}
如果我正在编写您的应用程序,我不会将数据库放在SD卡上。如果用户正在从中复制数据,则应用程序将无法访问该数据。我会提供一个“备份”功能,可以在SD卡上创建XML,JSON或CSV等文件。然后由用户自行备份到远程存储,并且您知道您将始终能够访问您的数据库。除非你想创建一个临时存储空间并将其全部合并到sd卡上,当它变得可用时...但这听起来像是更多的工作,那么它是值得的。我希望这能回答你的问题!
答案 2 :(得分:0)
不,您无法直接访问数据库。您可以使用adb shell
到cd
到该目录。
以下是有关该主题的一些提示:
http://developer.android.com/guide/developing/tools/adb.html#sqlite
我不明白Ormlite的含义。