我已经有一个SQLite数据库。我把它放在我项目的assets
文件夹中。我阅读了Android文档。它表示,对于Android中的所有数据库,路径是data/data/pack_name/database_name
。android如何访问资产文件夹中包含的sqlite数据库
这使我困惑。我只是将它放在assets
文件夹中,所以路径是data/data/assets/database_name
?
我已经有一个SQLite数据库。我把它放在我项目的assets
文件夹中。我阅读了Android文档。它表示,对于Android中的所有数据库,路径是data/data/pack_name/database_name
。android如何访问资产文件夹中包含的sqlite数据库
这使我困惑。我只是将它放在assets
文件夹中,所以路径是data/data/assets/database_name
?
软件包名称不是项目名称,软件包名称是命名空间。从安东尼的链接。
记住要改变 “YOUR_PACKAGE” 到您的应用程序包的命名空间 :在 DB_PATH串(即com.examplename.myapp)。
例如,从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
当你创建利用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
文件夹中。
希望这是有道理的。
“/ data/data/YOUR_PACKAGE/databases /“ 但是,什么是”YOUR_PACKAGE“,意思是:如果我的项目名称是Helloworld 那么路径是”/ data/data/Helloworld/databases /“? 谢谢 – user275788 2010-02-23 14:46:25
我相信这是正确的,我现在在工作,否则我会启动我的课程并给你直接的答案。 – 2010-02-23 14:49:06
不是问题,请参阅我的修改以获取修改后的实际路径示例。 – 2010-02-23 14:54:01
当我尝试打开我的数据库,我得到“无法打开数据库文件”。我认为它没有找到数据库,也没有发现其他程序员错误。在日志中,我看到以下对我来说很好的东西。
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。
我无法在我的项目中找到build-impl.xml,我正在使用eclipse。 – herbertD 2012-01-19 03:22:22
@ScCrow我也跟着this的例子,并有同样的问题,直到我意识到我没有正确使用DataBaseHelper(或者说它有一个我忽略的怪癖)。
在活动中使用DatabaseHelper类时,必须确保先调用createDatabase!如果您查看openDatabase的代码,它不会检查数据库是否存在,因此您必须(尝试)在您使用它的每个活动中创建数据库,或者修改openDatabase方法以检查以确保数据库存在。张贴的链接确实指示你以这种方式使用它,但你(像我)可能已经掩盖了这一点。
坏:
DBAdapter db = new DBAdapter(this);
db.openDataBase(); //Bad! db not created yet!
好:
DBAdapter db = new DBAdapter(this);
db.createDataBase(); //needs exception handling
db.openDataBase();
在你DBAdapter.java,改变openDatabase
方法的返回类型SQLiteDatabase
。
当您访问数据库时只需使用SQLiteDatabase data = db.openDatabase()
,其中db
是DBAdapter db = new DBAdapter(this)
。
我推荐以下教程。这对我帮助很大。链接:[在android应用程序中使用自己的sqlite数据库](http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/) – 2013-03-24 15:02:45