2017-10-05 133 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数据库。我没有问如何获得这样的数据库的路径。 –