2012-08-07 28 views
1

我注意到,openOrCreateDatabase只能在模擬器中使用,而不能在電話上使用,當我右鍵單擊該項目並「以Android應用程序運行」。我已經檢查了DDMS,並且通過模擬器成功創建了數據庫,但不是真正的設備。在手機上進行測試時,我根本沒有收到任何錯誤信息。是的,我知道數據庫輔助類,我也嘗試過,沒有錯誤信息。所以我想知道,是否存在權限問題?需要設置某種配置以便在電話上測試時創建SQLite數據庫?任何幫助表示讚賞。謝謝。android openOrCreateDatabase只能在模擬器中運行

P.S.我與本教程如下:http://www.youtube.com/watch?v=OUoGnvz_Yw4


編輯添加代碼: 這是...在仿真器工作正常,沒有任何反應設備。任何幫助表示讚賞。再次感謝。

package com.solitario.dbtest1; 

import android.app.Activity; 
import android.database.sqlite.SQLiteDatabase; 
import android.os.Bundle; 

public class MainActivity extends Activity { 
    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 

     SQLiteDatabase db = this.openOrCreateDatabase("dbtest1.db",MODE_PRIVATE,null); 
     db.execSQL("CREATE TABLE IF NOT EXISTS FunnyNames (email VARCHAR, firstName VARCHAR, lastName VARCHAR);"); 
     db.close(); 
    } 
} 

編輯迴應羅布的問題: 更加註重我的logcat,我看到下面兩行:

08-07 21:44:33.439: D/Database(2936): dbopen(): path = /data/data/com.solitario.dbtest1/databases/dbtest1.db, flag = 6 
08-07 21:44:33.439: D/Database(2936): dbopen(): path = /data/data/com.solitario.dbtest1/databases/dbtest1.db, free size = 888 

我試圖通過鍵入以下到我的終端拉數據庫,並獲得了「權限被拒絕」。

[email protected]:~/sdk/platform-tools$ sudo ./adb pull /data/data/com.solitario.dbtest1/databases/dbtest1.db 
failed to copy '/data/data/com.solitario.dbtest1/databases/dbtest1.db' to './dbtest1.db': Permission denied 

所以搞清楚終端會給我不同的反應,如果我試圖把它不存在的文件,我走進我的機器人設置,清除應用程序的數據,但並沒有卸載的應用。然後再次嘗試從終端上拉數據庫,並得到一個「不存在」。

[email protected]:~/sdk/platform-tools$ sudo ./adb pull /data/data/com.solitario.dbtest1/databases/dbtest1.db 
remote object '/data/data/com.solitario.dbtest1/databases/dbtest1.db' does not exist 

這樣看來,它的確在創建數據庫,但DDMS不會告訴你一個數據庫創建時,也不會對終端讓你把它拉,以便看看它。

因此,我想修改我的問題......在構建Android應用程序並在實際設備上測試時,如何驗證您的命令已成功?有哪些工具可以驗證我的查詢是否已在droid上執行?

再次感謝您的閱讀和您的迴應!

+0

您好,我已經與Android的DB工作了公平一點,我不知道如何幫助。在我看來,這個問題是創建和發佈你最小的失敗例子的好選擇。 – James 2012-08-07 21:07:32

+0

發佈一些代碼,以便我們可以看到你在做什麼。 – Barak 2012-08-07 22:11:02

+1

它不是創建數據庫,還是隻是無法導航到設備上的數據庫?在真實(未根據)設備上創建數據庫的應用程序目錄對您而言不可見。 – Rob 2012-08-08 00:21:29

回答

2

要在無根設備上進行調試時查看數據庫,您需要將其複製到公共可見位置,如SD卡。

您可以使用類似下面的代碼將您的數據庫複製到SD卡(不要忘記在發貨前禁用此代碼)。在您想驗證你的數據庫是處於什麼狀態點進行調用。

String sourcePath = "/data/data/com.solitario.dbtest1/databases/dbtest1.db"; 
File sourceFile = new File(sourcePath); 

FileInputStream fis = new FileInputStream(sourceFile); 

String outFilePath = Environment.getExternalStorageDirectory() + "/dbtest1.db"; 

OutputStream output = new FileOutputStream(outFilePath); 

byte[] buff = new byte[1024]; 
int len; 
while ((len = fis.read(buff)) > 0) { 
    output.write(buff, 0, len); 
} 
output.flush(); 
output.close(); 
fis.close(); 

您可能需要修改輸出目錄,如果你沒有在你的設備的SD卡。

一旦你把它放在SD卡上,你可以在Eclipse中使用DDMS將它複製到你的開發機器上。

一旦你開發機器上SQLite DB browser可以打開數據庫,並瀏覽/查詢它等