我正在尝试使用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数据库助手类。
答案 0 :(得分:0)
我会建议:
真的是说数据库文件是/data/data/com.package/databases/someDB.db
???所有Android设备存储他们的数据库是/data/data/com.package/databases/someDB
您是否尝试过从应用/data/data/com.package/databases/someDB
到/sdcard/myolddb_in_newplace
的完整副本文件?
您是否尝试使用过管道?像这里https://unix.stackexchange.com/a/111610/125332