0

我正在尝试获取我的 Android SQLite 程序正在使用的数据库列表。如果我理解正确,数据库位于:

数据/数据/[包名]/数据库

数据库是使用以下方法创建的:

SQLiteDatabase.execSQL(DATABASE_CREATE);

然后我尝试使用以下方法获取列表:

String[] instrumentFileList = MainActivity.this.fileList();

但是,这会返回一个空数组。我知道正在创建 SQL 数据库,因为我的应用程序的其他部分能够访问它。这是因为我的手机没有植根而无法获取列表吗?

另外,有没有办法使用 adb 获取该目录中的文件列表?

任何帮助是极大的赞赏。

4

1 回答 1

1

您的方法 fileList() 的实现如何?每个数据库都存储在 /data/data/[packagename]/databases 下的单独文件中,通常数据库名称以“.db”为后缀,您可以通过列出该目录来实现。

    if (getDatabasePath(DBNAME) != null) {
        for (File f : getDatabasePath(DBNAME).getParentFile().listFiles(new FileFilter() {

            @Override
            public boolean accept(File pathname) {
                if (pathname.getName().matches("^.*\\.db$")) {
                    return true;
                }
                return false;
            }
        })) {
            Log.d(TAG, f.getAbsolutePath());
        }
    }

如果你想从 adb 中列出数据库文件,你可以这样做

adb shell ls /data/data/[youpackagename]/databases/*.db

在某些情况下,由于权限限制,它可能无法正常工作,但是您可以在应用程序中将数据库目录权限设置为全球可读。

于 2014-12-20T00:59:52.893 回答