android - 如何更改 Room Database 的默认数据库文件位置?

标签 android android-sqlite android-room

我在我的应用程序中使用 RoomDB。能够执行crud操作。
其实我想看看db文件。

getDatabasePath("user.db").getAbsolutePath();

上面的代码给了我 db 文件保存的目录
目录是这样的
 /data/data/com.example.manvish.roomdb/databases/user.db

但即使在命令提示符下使用 sudo,我仍然无法访问数据目录。
现在我想将 DB 文件位置更改为内部存储器或 SD 卡中的其他一些文件夹。我怎样才能做到这一点?

最佳答案

Java解决方案:

  • 在 list
  • 中授予权限
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
        <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
    
  • 创建db(这里SofDatabase是一个单例类)
  • private static final String DB_NAME = "stack_overflow_db";
    private static final String DB_PATH = String.format("%s/%s",
     Environment.getExternalStorageDirectory().getAbsolutePath(), DB_NAME);
    
        public static synchronized SofDatabase getInstance(Context aContext) {
            if (sInstance == null) {
                sInstance = Room.databaseBuilder(aContext, SofDatabase.class, DB_PATH)
                        .fallbackToDestructiveMigration()
                        .addCallback(roomCallback).build(); //adding callback from Room
            }
            return sInstance;
        }
    

    打回来
         /**
         * Get Notified once db is created
         */
        private static final RoomDatabase.Callback roomCallback = new RoomDatabase.Callback() {
            @Override
            public void onCreate(@NonNull SupportSQLiteDatabase db) {
                super.onCreate(db);
                Log.i("SOF", db.getPath()); //which prints out -->  I/SOF: /storage/emulated/0/stack_overflow_db
                // add some jobs once db is created
            }
        };
    

    关于android - 如何更改 Room Database 的默认数据库文件位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48903918/

    相关文章:

    android - 如何在android中保存listview并在需要时将其取回?

    android - 带有 RxJava2 的 Android Room 中的交易

    java - Android 加密 RSA InvalidKeyException

    安卓 : Load asynchronous pictures in listView

    java - 查询仅返回表中的数字或数字+字母组合。如何修改它以显示带字母的记录?

    android - android中Gson和Room的ID问题(发送json到客户端)

    android - 如何将数据对象从 Room DB 传递到 WorkManager 类

    Android 应用程序通过套接字与 Android native 二进制文件通信

    不幸的是,android 应用程序在从真实设备运行时停止了

    java - Android 数据库 EditText NumberSigned