2017-03-02 279 views
-2

我試圖運行下面的命令:運行mysql命令從Java

C:\Program Files\MySQL\MySQL Server 5.7\bin\mysql" -u root -padmin <C:\script.sql> C:\redir.txt 

通過使用此Java代碼:

Runtime.getRuntime().exec(command); 

其中command是包含mysql命令字符串。如果我使用cmd命令,它可以很好地工作,但是如果我運行java行,它不會創建帶有查詢結果的redir.txt。我無法弄清楚它爲什麼不起作用(順便說一下,它不會拋出任何異常或錯誤信息)。

+0

exec()具有一些特殊屬性,使得它很難直接使用。這是一篇非常有用的文章:http://www.javaworld.com/article/2071275/core-java/when-runtime-exec---won-t.html。不過,我也會發布你的代碼。 –

+0

爲什麼?它作爲一項服務運行。它旨在作爲服務運行。創建又一種啓動方式到底是什麼? – EJP

回答

0

各種問題,從這裏開始:

< C:\script.sql 

分別存在。

> C:\redir.txt 

這些「重定向」根本無法在您從Java發送的命令中使用。含義:那些「<」和「>」由cmd.shell處理。

可能可能創造像

cmd.exe .... 

與這些管道工程的命令;但我不確定。什麼肯定會有效:

  • 使用進程生成器並獲取子進程的stdin輸入;和其標準輸出/ stderr輸出流
  • 寫入script.sql的含量成標準輸入流和 讀取stdout流,例如以推送進入redir.txt OUTFILE
  • 寫入Java代碼

最後:你必須轉義\\\在您的命令字符串文字!

0

將該命令放入批處理文件/ bash腳本(取決於您的環境),並使用exec()調用該命令。 Java的exec()有很多問題,特別是在涉及命令行參數的地方,所以這通常是解決這個問題的最好方法。