2010-02-23 81 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)

相關問題