android如何访问assets文件夹中包含的sqlite数据库

时间:2010-02-23 14:22:04

标签: android sqlite

我已经有了一个SQLite数据库。我把它放在我项目的assets文件夹中。我阅读了Android文档。它说对于Android中的所有数据库,路径为data/data/pack_name/database_name

这让我很困惑。我只是把它放在assets文件夹中,所以路径是data/data/assets/database_name

5 个答案:

答案 0 :(得分:7)

包名称不是项目名称,包名称是名称空间。来自安东尼的链接。

  

请记得更改“YOUR_PACKAGE”   到您的应用程序包命名空间   (即:com.examplename.myapp)中的   DB_PATH字符串。

例如,从the Hello World tutorial开始,项目名称为HelloAndroid,但包名称为com.example.helloandroid

如果此应用程序有数据库,则会将其存储在data/data/com.example.helloandroid/database

要了解其他应用程序的效果,您可以启动模拟器。在菜单栏上你有你的avd的名字(我认为它代表Android虚拟设备)。我的是“avdessay:5554”

(在Linux上)从命令行输入:

adb -s emulator-5554 shell

您必须使用您正在使用的任何端口替换5554.

如果你有命令提示符'#',你可以输入:

cd data/data

在那里,您将看到eveything采用包名称的形式。

更多信息here

答案 1 :(得分:6)

当您使用SQLiteDatabaseSQLiteOpenHelper创建数据库时,它会在您的data/data/package_name/database中创建数据库。

您可以使用

访问该资源
InputStream myInput = myContext.getAssets().open(your_database_here);

任何其他信息,请查看Using your own SQLite database in Android Applications

路径的package_name部分将是的名称。您可以在.java文件的第一行找到包的名称。

作为一个例子,我的课程从顶部

开始
package com.forloney.tracker;

所以我的数据库在data/data/com.forloney.tracker/database文件夹中。

希望这是有道理的。

答案 2 :(得分:1)

@ScCrow我也跟着this示例并遇到了同样的问题,直到我意识到我没有正确使用DataBaseHelper(或者说它有一个我忽略的怪癖)。

在活动中使用DatabaseHelper类时,必须先确保调用createDatabase!如果查看openDatabase的代码,它不会检查数据库是否存在,因此您必须(尝试)在您使用它的每个活动中创建数据库,或者修改openDatabase方法以检查以确保db存在。发布的链接实际上是指示您以这种方式使用它,但是您(像我一样)可能已经掩饰了它。

为:

DBAdapter db = new DBAdapter(this);
db.openDataBase(); //Bad! db not created yet!

好:

DBAdapter db = new DBAdapter(this);
db.createDataBase(); //needs exception handling
db.openDataBase();

答案 3 :(得分:0)

当我尝试打开我的数据库时,我“无法打开数据库文件”。我假设它没有找到DB而不是其他程序员错误。在日志中,我看到以下内容对我来说很好。

   sqllite3_open_v2("/data/data/com.isildo.HelloListView/databases/ListsDB" ...

这是设置

private static String DB_PATH = "/data/data/com.isildo.HelloListView/databases/";    
private static String DB_NAME = "ListsDB";

在Package Explorer中的项目资产中,我看到了ListsDb数据库。

所以我至少认为我的一切都是正确的。我正在使用这个例子    [http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/]

在这里的一篇帖子中,有人提供了关于设置一些资产参数的建议。 {没有回复帖子}

**To get an ASSETS folder into your APK:
  In /nbproject/project.properties, 
     change assets.dir=
to
     assets.dir=assets 
     assets.available=true
In /nbproject/build-impl.xml, there is line in the “if=assets.available” target that reads
that needs to be changed to**

这是我们需要做的事情吗?如果是这样,我们是否可以对所需的更改有更好的指导。我无法找到建议更改的地方,我查看了项目设置和其他内容。

是的,我对环境不熟悉,所以我可能只是找不到它们。我在Windows上使用Eclipse。

答案 4 :(得分:0)

在DBAdapter.java中,将openDatabase方法的返回类型更改为SQLiteDatabase

访问数据库时,只需使用SQLiteDatabase data = db.openDatabase(),其中dbDBAdapter db = new DBAdapter(this)