7

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

我在其中一个类中添加了一些额外的代码,以将 db 从 /data 复制到 sd 卡,这工作正常,但实际上我认为应该可以设置存储 db 的路径。我错过了什么,或者这对 Ormlite 来说是不可能的吗?

在此先感谢, C

4

3 回答 3

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 等中创建 db 文件 Pro:保存内部内存到PC)此外,任何人都可以阅读它,无论是赞成还是反对。

使用 context.getExternalFilesDir() 而不是 Environment.getExternalStorageDirectory() 将使用特定于您的应用程序的位置,并且将在卸载后自动清理(并且它也会在应用程序更新时出现在 2.2 上)。

PS我在某处读到这种方法可能不适用于2.2之前的Android版本(?)

于 2012-10-28T18:35:06.177 回答
2

你可以做类似https://stackoverflow.com/a/3911641中的人所做的事情。

当您创建将执行数据库事务的对象时,将覆盖 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 卡上……但这听起来像做更多的工作,那么它是值得的。我希望这回答了你的问题!

于 2012-03-19T08:04:43.753 回答
0

不,您不能直接访问数据库。您可以使用adb shellcd该目录。以下是关于该主题的一些提示:http: //developer.android.com/guide/developing/tools/adb.html#sqlite

而且我不明白 Ormlite 有什么。

于 2012-03-17T09:42:22.970 回答