17

我正在编写一些 SQLite 代码并想检查数据库。如果我在模拟器上运行代码,我可以使用 DDMS 文件管理器从 data\data\myProject\databases 中提取文件,但如果我在实际硬件上运行它,则无法访问 data\data 文件夹。除了获得手机的root访问权限之外,还有什么办法可以解决这个问题吗?

4

5 回答 5

19

SQLite 数据库实际上只是一个存储在手机内存中的文件,您可以将其复制到手机 SD 卡中,然后从您的 PC 轻松访问它。以下是完全符合您需要的功能。只需确保在使用函数之前更改您的包名称和数据库名称。

public static void backupDatabase() throws IOException {
    //Open your local db as the input stream
    String inFileName = "/data/data/your.package.name/databases/database.sqlite";
    File dbFile = new File(inFileName);
    FileInputStream fis = new FileInputStream(dbFile);

    String outFileName = Environment.getExternalStorageDirectory()
                                                    + "/database.sqlite";
    //Open the empty db as the output stream
    OutputStream output = new FileOutputStream(outFileName);
    //transfer bytes from the inputfile to the outputfile
    byte[] buffer = new byte[1024];
    int length;
    while ((length = fis.read(buffer))>0){
        output.write(buffer, 0, length);
    }
    //Close the streams
    output.flush();
    output.close();
    fis.close();
}

从代码中可以看出,数据库始终存储在文件夹中:

/data/data/your.package.name/databases/

名称(在我们的示例中为“database.sqlite”)是您在扩展 SQLiteOpenHelper 时选择的名称。显然,您还需要将“your.package.name”替换为您的应用程序包的名称。

于 2011-02-08T17:02:53.510 回答
2

使用复制文件到 /mnt/sdcard

cp /data/data/<packagename>/databases/<dbname>/<filename> /mnt/sdcard 

使用 adb,然后使用从 /mnt/sdcard 复制到您的桌面

adb pull /mnt/sdcard/<filename> 

然后使用 sqlite3 来查看。

于 2011-09-02T19:15:57.323 回答
2

你必须root你的设备。转到命令提示符并转到 adb 所在的位置。

例如

C:\Program Files\Android\android-sdk\platform-tools

类型adb root。现在转到您的文件资源管理器并检查。

于 2012-11-12T08:14:50.083 回答
1

我相信您的应用程序可以更改其本地存储数据文件的 unix 权限,以便其他应用程序和 adb 可以访问它们。

但是,您的应用程序无法更改安全电话的 /data 目录上缺少列表权限的情况。

结果,您将不得不使用“adb pull /full/path/to/file”来获取该文件 - 您无法浏览到它,因为您无法生成 /data 列表或文件的其他几个中间目录父级。

于 2011-02-08T18:30:56.067 回答
1

真正解决这个问题的唯一方法是将文件放在可以访问它的地方,就像在开发过程中放在 sdcard 上一样。然后,一旦您满意,事情就可以正常工作,将文件放在您想要的任何位置。

我这样说是因为我有一个零售 Nexus One 和开发者 Nexus One。在使用 DDMS 文件资源管理器时,我注意到我可以在开发人员设备上浏览数据文件夹,但不能在零售设备上浏览。我植根了我的零售设备,但没有帮助。

所以我想在这个问题上需要做更多的研究。但在那之前,我希望这会有所帮助。

于 2011-05-17T22:38:23.860 回答