我已經有一個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