DDMS文件浏览器无法访问数据\数据(HTC Desire HD)

Rok*_*Rok 17 sqlite android ddms

我正在研究一些SQLite代码,并希望检查数据库.如果我在模拟器上运行代码,我可以使用DDMS文件管理器从data\data\myProject\databases中提取文件,但如果我在实际硬件上运行它,则无法访问data\data文件夹.除了获得手机的root访问权限之外还有其他方法吗?

dst*_*nox 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();
}
Run Code Online (Sandbox Code Playgroud)

正如您可能从代码中看到的那样,数据库始终存储在以下文件夹中:

/data/data/your.package.name/databases/
Run Code Online (Sandbox Code Playgroud)

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

  • 对于我们这些没有root电话的人来说,这是一项很好的技术.只需确保添加WRITE_EXTERNAL_STORAGE权限,否则无效.它被我的异常处理程序捕获,所以我错过了它. (4认同)