我已经有了一个SQLite数据库。我把它放在我项目的assets
文件夹中。我阅读了Android文档。它说对于Android中的所有数据库,路径为data/data/pack_name/database_name
。
assets
文件夹中,所以路径是data/data/assets/database_name
?
答案 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)
当您使用SQLiteDatabase
或SQLiteOpenHelper
类创建数据库时,它会在您的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()
,其中db
为DBAdapter db = new DBAdapter(this)
。