2017-03-18 63 views
0

我试图使用root和sqlite3来访问数据库以从中获取数据。如何使用root从Android中获取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作为数据库名称和抛出一个异常,它可以”找到数据库并继续在logcat中显示结果。

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

当我尝试从亚行.output /sdcard/myfile.txt它工作正常,我发现文件中的结果,但我不能让它通过代码

那么做如何,无论如何得到这个数据?有没有更好的方法来做到这一点?

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

回答

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

+0

1.是的,这是数据库 2.拷贝数据库文件是不是一种选择,因为它是非常大的变化非常快,每次改变时间,我会查询。 3.解决了这个问题。谢谢 – Mohammad

+0

反正有没有得到结果作为一个字符串变量? – Mohammad

+0

你是什么意思?阅读我写的网址。你可以输出命令行日志字符串和文件 – Vyacheslav

相关问题