2017-03-18 95 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

相關問題