以编程方式获取应用程序的数据库目录

Dan*_*lle 12 database sqlite storage android

我想在我的应用程序中使用"预加载"数据库.这里有很多关于这个问题,最指向该博客文章点击这里或同类者.

到现在为止还挺好.我只是想知道是否有更好的方法来获取默认数据库目录,所以你不必使用这样的东西:

private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";
Run Code Online (Sandbox Code Playgroud)

我的意思是,将来可能会改变,或者设备或ROM可能会将其放在其他地方......那么有没有办法以编程方式获取此路径?

在Context中存在一个getDatabasePath(name)的方法,但是你需要给它一个现有的db名称,而且......它还不存在,我想把它移到那里:P

IG2*_*013 10

我用了...

String destPath = getFilesDir().getPath();
destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases";
Run Code Online (Sandbox Code Playgroud)

  • 如果文件夹在将来的版本中发生变化怎么办? (3认同)

Nik*_*kov 8

创建一个空数据库,获取路径getDatabasePath(),然后用自己的数据覆盖它.

  • 好吧,既然没有正式的API来导入现成的DB文件,那么把你自己的文件放在那里也是一个黑客.至少你确定你把它放在正确的地方. (4认同)
  • @ Simon,getDatabasePath()不需要特殊权限 (2认同)

Pea*_*oto 8

由SQLiteAssetHelper使用:

 String path = mContext.getDatabasePath(mName).getPath();
Run Code Online (Sandbox Code Playgroud)

这时,数据库不存在.我认为String只占用内部路径并添加适当的修饰符.事实上,这似乎工作得很好:

context.getDatabasePath("a").getParentFile()
Run Code Online (Sandbox Code Playgroud)

基本上,您不需要创建一个真正的数据库,只需要一个.

  • 在将任何内容写入/复制到context.getDatabasePath("a")之前,数据库目录可能不存在,请确保检查context.getDatabasePath("a").getParentFile()是否存在,如果不存在则创建目录. (2认同)

Tho*_*mmy 6

您可以使用方法getFilesDir()getDatabasePath在Activity-Class中获取此文件夹.
更多信息在这里