2014-03-31 70 views
0

這裏超級初學者。如何保存具有.db擴展名的SQLite數據庫?

我創建了一個SQLite數據庫,我想用SQLiteManager插件查看它,但是我的數據庫不會在我的(虛擬)設備上添加.db擴展名。到目前爲止,我不得不將該文件複製到我的計算機上,更改擴展名並將其推回以啓用SQLiteManager圖標。然後我可以看到數據庫。

我該如何避免這種情況?

此外,有人提到我不應該依賴「/ data/data /」來成爲正確的路徑。他們建議我使用Context.openOrCreateDatabaseget*Pathget*Dir方法之一。有人能詳細說明這些嗎?我使用的代碼來自我看到的Youtube教程。

這裏的定義路徑代碼:

try { 
     String destPath = "/data/data/" + getPackageName() + "/databases/GradesDB.db"; 
     File f = new File(destPath); 
     if(!f.exists()) { 
      CopyDB(getBaseContext().getAssets().open("mydb"), 
       new FileOutputStream(destPath)); 
     } 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
+0

你是否正在擴展SQLiteOpenHelper來創建你的數據庫?如果是這樣,你應該在你的構造函數中提供一個數據庫名稱,只需在該名稱的末尾添加「.db」。 – panini

+0

**「我使用的代碼來自我看到的Youtube教程。」**:哎呀!有一點要記住 - 任何人都可以製作視頻並將其發佈到YouTube--這並不意味着他們對自己的行爲有絲毫的想法。該代碼在幾個方面是錯誤的。從不硬編碼文件系統路徑(Android設備的製造商可以選擇使用不同的目錄結構)。除非你有特定的要求(並且知道其含義是什麼),否則使用'getBaseContext()'是你很少會做的事情。 – Squonk

+0

謝謝,@panini!這很簡單,讓數據庫可以訪問。和@Squonk,我試圖弄清楚爲什麼教程包含這塊代碼。它究竟做了什麼以及做什麼更好的方法? – NSouth

回答

1

這不是對數據的基礎上工作的android 使用本指南創建dbhelper

guide

,並以正確的方式在此之後,無論你喜歡什麼,你都可以創建數據庫文件名

+0

你應該避免只是連接到異地資源,因爲它們可能是易受影響的鏈接。最好提取相關信息並在答案中加上。 – panini

2

你不應該依賴「數據/數據」,因爲它m唉變更或可能無法在某些設備上工作,getDatabasePath (String name)總是返回正確的路徑,該文件說,

返回其中一個數據庫openOrCreateDatabase

+0

嘿,我已經做了一些關於數據庫設計的閱讀,並且改進了我的代碼的實現。然而,我沒有修復的部分是我原來的帖子。我想我很困惑它到底在做什麼以及我應該做什麼。它是否創建數據庫,如果它不存在?在代碼運行在全新的虛擬機上並且數據庫文件從未創建之後,我發生了一次故障。 – NSouth