2010-02-23 116 views
5

我已经有一个SQLite数据库。我把它放在我项目的assets文件夹中。我阅读了Android文档。它表示,对于Android中的所有数据库,路径是data/data/pack_name/database_nameandroid如何访问资产文件夹中包含的sqlite数据库

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

+0

我推荐以下教程。这对我帮助很大。链接:[在android应用程序中使用自己的sqlite数据库](http://www.reigndesign.com/blog/using-your-own-sqlite-database-in-android-applications/) – 2013-03-24 15:02:45

回答

7

软件包名称不是项目名称,软件包名称是命名空间。从安东尼的链接。

记住要改变 “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

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文件夹中。

希望这是有道理的。

+0

“/ data/data/YOUR_PACKAGE/databases /“ 但是,什么是”YOUR_PACKAGE“,意思是:如果我的项目名称是Helloworld 那么路径是”/ data/data/Helloworld/databases /“? 谢谢 – user275788 2010-02-23 14:46:25

+0

我相信这是正确的,我现在在工作,否则我会启动我的课程并给你直接的答案。 – 2010-02-23 14:49:06

+0

不是问题,请参阅我的修改以获取修改后的实际路径示例。 – 2010-02-23 14:54:01

0

当我尝试打开我的数据库,我得到“无法打开数据库文件”。我认为它没有找到数据库,也没有发现其他程序员错误。在日志中,我看到以下对我来说很好的东西。

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。

+0

我无法在我的项目中找到build-impl.xml,我正在使用eclipse。 – herbertD 2012-01-19 03:22:22

1

@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(); 
0

在你DBAdapter.java,改变openDatabase方法的返回类型SQLiteDatabase

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

相关问题