如何使用root从Android中获取SQLite3查询的结果

时间:2017-03-18 20:56:15

标签: java android sqlite

我正在尝试使用root和sqlite3访问数据库以从中获取数据。

到目前为止,我设法在logcat中显示数据,但我无法以文件或任何其他方式获取数据。

使用RootCommand library这是我的代码:

public void readDB(String message){
    try {
        Shell shell = Shell.startRootShell();
        String setOutput= "sqlite3 .output /sdcard/number.txt"; // This didn't work because it treats .output as a database name
        String readTest = "sqlite3  /data/data/com.package/databases/someDB.db \"SELECT * FROM table\";";

        shell.add(new SimpleCommand(setOutput)).waitForFinish();
        shell.add(new SimpleCommand(readTest)).waitForFinish();
        Log.d(TAG , "finished");
    } catch (IOException | TimeoutException e) {
        e.printStackTrace();
        Log.e(TAG, e.getMessage());
    }
}

正如here所解释的那样,我使用.output来指定一个文件,但它不起作用,因为它将.output视为数据库名称并抛出一个无法找到的异常db并继续在logcat中显示结果。

我尝试writefile('/sdcard/myfile.txt',column)但没有文件,也没有logcat中的数据。

当我从adb尝试.output /sdcard/myfile.txt时,它工作正常,我在文件中找到了结果,但我无法通过代码完成它

那么如何获取这些数据呢?有没有更好的方法来做到这一点?

PS:我没有访问自己的应用数据,所以我不能使用sqlite数据库助手类。

1 个答案:

答案 0 :(得分:0)

我会建议:

  1. 真的是说数据库文件是/data/data/com.package/databases/someDB.db ???所有Android设备存储他们的数据库是/data/data/com.package/databases/someDB

  2. 您是否尝试过从应用/data/data/com.package/databases/someDB/sdcard/myolddb_in_newplace的完整副本文件?

  3. 您是否尝试使用过管道?像这里https://unix.stackexchange.com/a/111610/125332