2016-05-27 17 views
0

私は別のアプリケーションのデータベースにアクセスし、それが(ROOTを使用して)コンソールに内容の印刷しようとしているが、私はこの応答を取得しています何らかの理由でいます:エラー:不完全なSQL:LS

E/[Error]: Error: incomplete SQL: ls 
E/[Error]: exit 

Iドンなぜこれが起こっているのか本当に分かりません。私はエスケープ引用符で私の構文を入れようとしました、私は他のsqliteコマンドを試しましたが、それは正常に動作していないようです。

私はデータベースにアクセスし、ADBを使用して同じパスでADBを使用してコンテンツを印刷できます。アプリケーションのボタンを押すと、ルートアクセスが必要なので、2つは問題ではありません。

マイダウン易しく書き直さコード:誰かが私が間違ってやっている

onCreate

​​

RunWithRoot

private void RunWithRoot(String textView) { 
     try { 
      String line; 
      Process process = Runtime.getRuntime().exec(textView); 
      OutputStream stdin = process.getOutputStream(); 
      InputStream stderr = process.getErrorStream(); 
      InputStream stdout = process.getInputStream(); 

      stdin.write(("ls\n").getBytes()); 
      stdin.write("exit\n".getBytes()); 
      stdin.flush(); 

      stdin.close(); 
      BufferedReader br = 
        new BufferedReader(new InputStreamReader(stdout)); 
      while ((line = br.readLine()) != null) { 
       Log.d("[Output]", line); 
      } 
      br.close(); 
      br = 
        new BufferedReader(new InputStreamReader(stderr)); 
      while ((line = br.readLine()) != null) { 
       Log.e("[Error]", line); 
      } 
      br.close(); 

      process.waitFor(); 
      process.destroy(); 

     } catch (Exception ex) { 
     } 
    } 

を知っていますか?私はAndroid開発には非常に新しく、さらに根っこになっています。誰かがこれで正しい方向に私を投げることができるなら、それは非常に高く評価されるだろう。

PS:このアプリは、個人的な使用のためになりますので、私はなど、人々がルートを持っている場合、またはパスが存在するかどうかをチェックする必要はありません..私はすでにあわや

+1

なぜあなたは 'stdin.write((" ls \ n ")。getBytes());'を実行していますか? –

+0

@ScaryWombat私は本当に盲目です。ありがとうございました!しかし、それは言う: "データベースを開くことができません" data/data/app.pkge/databases/Database.db ":データベースファイルを開くことができません" –

+0

パスは正しいですか? –

答えて

0
を心配するいくつかの開発者の心を聞きました

次のコードを使用して修正しました。

private void RunWithRoot(){ 
    String line; 
    Process process = Runtime.getRuntime().exec("su shell"); 
    OutputStream stdin = process.getOutputStream(); 
    InputStream stderr = process.getErrorStream(); 
    InputStream stdout = process.getInputStream(); 

    stdin.write("su -c 'sqlite3 \"/data/data/app.pkge/databases/Database.db\" \"select * from messages;\"'\n".getBytes()); 
    stdin.flush(); 

    stdin.close(); 
    BufferedReader br = new BufferedReader(new InputStreamReader(stdout)); 
    while ((line = br.readLine()) != null) { 
     Log.d("[Output]", line); 
    } 
    br.close(); 
    br = new BufferedReader(new InputStreamReader(stderr)); 
    while ((line = br.readLine()) != null) { 
     Log.e("[Error]", line); 
    } 
    br.close(); 

    process.waitFor(); 
    process.destroy(); 
} 

これで正しく動作します。 @ ScaryWombatに大変感謝しています!