在Android emulator上查看/编辑SQLite数据库

在Android emulator上查看/编辑SQLite数据库,android,macos,android-studio,android-sqlite,avd,Android,Macos,Android Studio,Android Sqlite,Avd,我正在开发一个应用程序,它在Mac OS上的Android Studio 2.3中使用SQLite,我想查看SQLite数据库,但似乎找不到SQLite文件。AVM文件在哪里,特别是sqlite文件在哪里 我找到了AVD文件夹 /用户//.android/avd/Pixel_XL_API_26.avd,但找不到用户生成的数据。有什么建议吗?您可以始终包括查找数据库信息的方法 例如,您可以查询sqlite_主表,例如:- Cursor csr = db.query("sqlite_mast

我正在开发一个应用程序,它在Mac OS上的Android Studio 2.3中使用SQLite,我想查看SQLite数据库,但似乎找不到SQLite文件。AVM文件在哪里,特别是sqlite文件在哪里

我找到了AVD文件夹
/用户//.android/avd/Pixel_XL_API_26.avd,但找不到用户生成的数据。有什么建议吗?

您可以始终包括查找数据库信息的方法

例如,您可以查询sqlite_主表,例如:-

    Cursor csr = db.query("sqlite_master",null,null,null,null,null,null);
这相当于:-

    SELECT * FROM sqlite_master
这些是允许您查询/更改内部结构的PRAGMA语句

注意:使用rawQuery可在光标中获取信息,但使用execSQL可进行更改,例如分别设置和获取用户版本数据库版本:-

    db.execSQL("PRAGMA user_version=" + Integer.toString(version));
    Cursor csr = db.rawQuery("PRAGMA user_version",null);
您还可以查看表中输出到日志的数据,这些数据基于tablename将更改为适当tablename的位置:-

    Cursor csr = db.query("tablename",null,null,null,null,null,null);
    String logdata;
    while (csr.moveToNext()) {
        Log.d("DBINFO","Row " + csr.getPosition());
        logdata = "";
        for (int i =0; i < csr.getColumnCount(); i++) {
            String val;
            try {
                val = csr.getString(i);
            }
            catch (Exception e) {
                val = "unobtainable";
            }
            logdata = logdata + "\t\nColumn Name=" +
                    csr.getColumnName(i) +
                    "   Value=" + val;
        }
        Log.d("DBINFO",logdata);
    }
    csr.close();

注意!这仅使用getString,因此无法正确表示某些值,例如double和float,如果是BLOB,则无法获取该值。

我认为AS的emulator不允许您查看数据库文件data/data/packagename/databases。然而,另一种模拟器可以。最好的解决方案是@Bob在Thank的回答,像这样的间接方法效果很好。@koenbro,你可能会感兴趣,这是在提出/回答这个问题时考虑到上述问题的更全面的排列