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

时间:2012-10-04 08:24:37

标签: android database sqlite storage

我想在我的应用中使用“预加载”数据库。关于这一点有很多问题,大多数都指向这篇博客文章here或类似的。

到目前为止一切顺利。我只是想知道是否有更好的方法来获取默认数据库目录,所以你不必使用这样的东西:

private static String DB_PATH = "/data/data/YOUR_PACKAGE/databases/";

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

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

5 个答案:

答案 0 :(得分:9)

我用过......

String destPath = getFilesDir().getPath();
destPath = destPath.substring(0, destPath.lastIndexOf("/")) + "/databases";

答案 1 :(得分:8)

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

答案 2 :(得分:8)

由SQLiteAssetHelper使用:

 String path = mContext.getDatabasePath(mName).getPath();

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

context.getDatabasePath("a").getParentFile()

基本上,您不需要创建真正的数据库,只需要求它。

答案 3 :(得分:6)

您可以使用活动类中的方法getFilesDir()getDatabasePath来获取此文件夹。
更多信息here

答案 4 :(得分:1)

您可以在Helper类中使用getDatabasePath方法:

NetAddr::CIDR.create('0000000000000000FFFF00000B79290A'.scan(/.{4}/).join(':'))
=> #<NetAddr::CIDRv6:0x007fd4971c34f0 @ip=18446462598925330698, @version=6, @address_len=128, @all_f=340282366920938463463374607431768211455, @netmask=340282366920938463463374607431768211455, @network=18446462598925330698, @hostmask=0, @tag={}, @wildcard_mask=340282366920938463463374607431768211455>