2012-01-20 11 views
1

javaプログラムから.sqlファイルからデータベースのインポートを実行します。私のプログラムはWindows上で正常に動作しています。しかし、私はLinuxマシンの問題に直面しています。Linuxマシンのjavaからmysqlデータベースのインポートスクリプトを実行

コード -

try { 




ProcessBuilder builder = new ProcessBuilder("mysql -u root -p password db-name < db_script.sql"); 
      builder.redirectErrorStream(true); 
      Process pr = builder.start(); 

      InputStream is = pr.getInputStream(); 

      // Now read from it and write it to standard output. 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is)); 
      String line = reader.readLine(); 
      while (line != null) { 
       System.out.println(line); 
       line = reader.readLine(); 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 

私は取得しています - にjava.io.IOException:プログラム "のmysql -uルート -pパスワードDB-名< db_script.sql" を実行できません: にjava.io.IOException :error = 2、No such file or directory

上記のコマンドは、Linux端末でうまく動作しています。 これについてアドバイスをお願いします。

おかげで、事前に

答えて

7

<リダイレクトでdb_script.sqlの完全なパスを提供していることを

は、シェルの事です。あなたは、Javaを7+使用している場合、あなたはJavaでリダイレクトを行うことができ、そうでない場合

ProcessBuilder builder = new ProcessBuilder("/bin/sh", "-c", "mysql -u root -p password db-name < b_script.sql"); 

はUPDATE:このような何かを試してみてください

ProcessBuilder builder = new ProcessBuilder(
     "mysql", "-u", "root", "-p", "password", "db-name"); 
builder.redirectInput(ProcessBuilder.Redirect.from(new File("b_script.sql"))); 
+0

上記を試した後。 "/ bin/sh:mysql -u root -pパスワードdb-name mahesh

+0

-cがありませんでした。申し訳ありません。 –

+0

返信いただきありがとうございます。更新されたコマンドで、それは私にエラーを与えていません。しかし、同じデータベースで更新されていません。驚いたことに、ターミナルでmysql helpコマンドを入力すると、出力が得られます。私は何が欠けているのか分からない。 – mahesh

0

あなたはあなたのコードが適切なディレクトリから実行されていることを確認しています?あなたのdb_script.sqlがinhomeであるならば、あなたは

home>mysql -u root -p password db-name < db_script.sql 

としてホームから実行するか、コマンド

+0

私は、.sqlファイルのフルパスも与えてみました。しかし、問題はファイルパスではないと思う。ありがとう – mahesh

0

それを達成するための簡単な方法。

String DBUSERNAME = ""; 
String DBUSERPASSWORD = ""; 
String sqlfilename = ""; 
PrintWriter writer = new PrintWriter("tmp.dmp", "UTF-8"); 
writer.println("mysql --user " + DBUSERNAME + " --password=" + DBUSERPASSWORD + " < " + sqlfilename); 
writer.close(); 

runCommand("chmod 777 tmp.dmp"); 
runCommand("./tmp.dmp"); 
runCommand("rm tmp.dmp"); 

public static void runCommand(String command) throws IOException { 
    String s = ""; 
    Process p = Runtime.getRuntime().exec(command); 

    BufferedReader stdInput = null; 
    BufferedReader stdError = null; 
    try { 
     stdInput = new BufferedReader(new InputStreamReader(p.getInputStream())); 
     stdError = new BufferedReader(new InputStreamReader(p.getErrorStream())); 

     // read the output from the command 
     while ((s = stdInput.readLine()) != null) { 
      System.out.println(s); 
     } 

     // read any errors from the attempted command 
     while ((s = stdError.readLine()) != null) { 
      System.out.println(s); 
     } 
    } finally { 
     if (stdInput != null) { 
      stdInput.close(); 
     } 

     if (stdError != null) { 
      stdError.close();     
     } 
    } 
} 
関連する問題