2017-10-05 130 views
0

我想通過使用房間庫指定其路徑訪問Android的內部存儲器上的數據庫。到目前爲止,我一直在使用以下語句:打開SQLite數據庫與指定的路徑與房間

dbPath = "/data/data/my.sqlitetesting/files/database/myDataBase.db"; 
SQLiteDatabase.openDatabase(dbPath, null, SQLiteDatabase.OPEN_READWRITE); 

如何使用此空間訪問此DB?

+1

據我所知,你必須實現自定義'SupportSQLiteOpenHelper'和'SupportSQLiteOpenHelper.Factory'然後用'RoomDatabase.Builder.openHelperFactory' .... 'AppDatabase db = Room.databaseBuilder(getApplicationContext(), AppDatabase.class,「database-name」)。openHelperFactory(customFactory)build();' – Selvin

+0

首先,把Room放在一邊。從不硬編碼路徑。對於許多基於操作系統版本或用戶(例如,輔助帳戶)的Android設備,該硬編碼值是錯誤的。您的硬編碼值或多或少映射到'new File(new File(getFilesDir(),「database」),「myDataBase.db」))'。但是,我同意塞爾文的觀點。因爲你的數據庫位於非標準位置,AFAIK你需要一個定製的'SupportSQLiteOpenHelper',它可以在運行時導出適當的位置。 – CommonsWare

+0

'@CommonsWare你是對的,我沒有真正的編碼它,我只是想表明這樣的路徑可能是什麼樣子。 –

回答

-2

@Jan馬利克我用這個代碼知道我是否有SD卡和獲取路徑無SD卡 然後我得到的內部存儲路徑

public void onAvail() { 

    String state = Environment.getExternalStorageState(); 

    if (state.equals(Environment.MEDIA_MOUNTED) && (!state.equals(Environment.MEDIA_MOUNTED_READ_ONLY))) { 

     File removable = ContextCompat.getExternalFilesDirs(this, null)[1]; 
     THE_PATH = String.valueOf(removable) + "/Documents/"; 

     //System.out.println("ALL TRUE ==> " + THE_PATH); 

    } else {// if (state.equals(Environment.MEDIA_MOUNTED_READ_ONLY)) { 
     THE_PATH = ""; 
     //System.out.println("ALL FALSE ==> "+ THE_PATH); 
    } 
} 

嘗試的這幾行代碼,我相信你路徑是不正確的你張貼的代碼,如果這不起作用,請告訴我們

 Context context = this; 
    String removable = getFilesDir().getAbsolutePath(); 
    THE_PATH = String.valueOf(removable)+"/"; 
    System.out.println("INTERNAL PATH ======> "+THE_PATH); 
    File file = new File(context.getFilesDir(), "NAME_OF_FILE"); 
    String PA = String.valueOf(file); 
    System.out.println("Where AM I ======> "+PA); 
+0

@janmalek我不介意表示你接受答案,並通過點擊向上按鈕對我來說似乎合乎邏輯,但我有兩個倒票,不明白爲什麼任何人都可以解釋 – Grendel

+0

你的回答沒有回答我的問題。我在問如何使用Room庫連接到SQLite數據庫。我沒有問如何獲得這樣的數據庫的路徑。 –