Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/233.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android、Ormlite、数据库位置_Android_Sql_Ormlite - Fatal编程技术网

Android、Ormlite、数据库位置

Android、Ormlite、数据库位置,android,sql,ormlite,Android,Sql,Ormlite,我正在使用Ormlite保存我的Android应用程序(在摩托罗拉Xoom上运行)中的一些数据。默认情况下,sql数据库保存到/data/data/[package name]/databases/[dbname].db。问题是,Xoom不是根目录,因此用户无法访问保存db的目录(无法复制/备份/编辑db的内容) 我在其中一个类中添加了一些额外的代码,以便将db从/data复制到sd卡,这很好,但实际上我认为应该可以设置db存储的路径。我是否遗漏了什么,或者这在Ormlite中是不可能的 提前感

我正在使用Ormlite保存我的Android应用程序(在摩托罗拉Xoom上运行)中的一些数据。默认情况下,sql数据库保存到/data/data/[package name]/databases/[dbname].db。问题是,Xoom不是根目录,因此用户无法访问保存db的目录(无法复制/备份/编辑db的内容)

我在其中一个类中添加了一些额外的代码,以便将db从/data复制到sd卡,这很好,但实际上我认为应该可以设置db存储的路径。我是否遗漏了什么,或者这在Ormlite中是不可能的

提前感谢,,
不,您不能直接访问数据库。您可以使用
adb shell
cd
到该目录。 以下是有关该主题的一些提示:


我不明白奥姆莱特有什么用。

你可以做一些像电影里那个家伙做的事情

创建将执行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卡可用时将所有内容合并到sd卡上。。。但这听起来比值得做的工作多得多。我希望这回答了你的问题

如果您使用以下内容,则可以在SD卡上创建数据库

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中创建db文件 优点:节省内存 Con:当SD卡不可用时(例如,当SD卡连接到PC时),无法访问DB 此外,任何人都可以阅读它,无论是赞成还是反对

使用context.getExternalFilesDir()而不是Environment.getExternalStorageDirectory()将使用特定于应用程序的位置,卸载后将自动清理该位置(在2.2版的应用程序更新中也会显示该位置)


另外,我在某个地方读到,这种方法可能不适用于2.2(?)之前的Android版本。

您是否正在尝试将数据保存到其他位置?我不清楚你到底想做什么。我目前面临着类似的问题
/sdcard/
是指手机调用的
/storage/simulated/0
,可移动存储卡安装在
/storage/
上,在API 21及更高版本上具有写保护功能。