0

Javaを使用してmysqlsqlファイルを復元しようとしていますが、なぜそれが機能しないのかわかりません。コードを以下に示します。

/*NOTE: Getting path to the Jar file being executed*/
            CodeSource codeSource = DBmanager.class.getProtectionDomain().getCodeSource();
            File jarFile = new File(codeSource.getLocation().toURI().getPath());
            String jarDir = jarFile.getParentFile().getPath();

            /*NOTE: Creating Database Constraints*/
            String dbName = "dth";
            String dbUser = "root";
            String dbPass = "root";

            String restorePath ="\""+ jarDir + "\\backup" + "\\" + s+"\"";


            /*NOTE: Used to create a DOS command*/
            String executeCmd = "";
            executeCmd = "C:\\xampp\\mysql\\bin\\mysql -u" + dbUser + " -p" + dbPass + " --database " + dbName + " < " + restorePath;


            System.out.println(executeCmd);


            Process runtimeProcess = Runtime.getRuntime().exec(executeCmd);
            int processComplete = runtimeProcess.waitFor();

            if (processComplete == 0) {
                JOptionPane.showMessageDialog(null, "Successfully restored from SQL : " + s);
            } else {
                JOptionPane.showMessageDialog(null, "Error at restoring");
            }

コードは実行されますが、javaswingがランタイムコマンドでスタックします。System.out.printlnによって出力される行は次のようになります。

C:\ xampp \ mysql \ bin \ mysql -uroot -proot --database dth <"F:\ Final Year Project \ Final \ build \ backup \ 0_Harish_2013-02-17-20-05-12.sql"

この行をコピーしてコマンドラインに貼り付けると、この行は完全に機能します。なぜJavaSwingインターフェースが待機状態でスタックするのかわからない。(同じクエリは、cmdとjavaで2秒ほどかかります。5分間待ちました)。

編集: 私はstreamgobblerを実行しましたが、それでもメリットはありません。それでも終了値:1が返されます。これは明らかに問題ですIllegalThreadStateExceptionこれを解決するにはどうすればよいですか?

Edit2:

ハングがまだ存在するため、ゴブリングは役に立ちません。ここにgobblerの出力があります。

OUTPUT>C:\xampp\mysql\bin\mysql  Ver 14.14 Distrib 5.5.27, for Win32 (x86)
OUTPUT>Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.
OUTPUT>
OUTPUT>Oracle is a registered trademark of Oracle Corporation and/or its
OUTPUT>affiliates. Other names may be trademarks of their respective
OUTPUT>owners.
OUTPUT>
OUTPUT>Usage: C:\xampp\mysql\bin\mysql [OPTIONS] [database]
OUTPUT>  -?, --help          Display this help and exit.
OUTPUT>  -I, --help          Synonym for -?
OUTPUT>  --auto-rehash       Enable automatic rehashing. One doesn't need to use
OUTPUT>                      'rehash' to get table and field completion, but startup
OUTPUT>       and reconnecting may take a longer time. Disable with
OUTPUT>         --disable-auto-rehash.
OUTPUT>                      (Defaults to on; use --skip-auto-rehash to disable.)
OUTPUT>  -A, --no-auto-rehash 
OUTPUT>                      No automatic rehashing. One has to use 'rehash' to get
OUTPUT>                      table and field completion. This gives a quicker start of
OUTPUT>                      mysql and disables rehashing on reconnect.
OUTPUT> --auto-vertical-output 
OUTPUT>                      Automatically switch to vertical output mode if the
OUTPUT>                      result is wider than the terminal width.
OUTPUT>  -B, --batch         Don't use history file. Disable interactive behavior.
OUTPUT>         (Enables --silent.)
OUTPUT>  --character-sets-dir=name 
OUTPUT>       Directory for character set files.
OUTPUT>  --column-type-info  Display column type information.
OUTPUT>  -c, --comments      Preserve comments. Send comments to the server. The
OUTPUT>                      default is --skip-comments (discard comments), enable
OUTPUT>         

(残りの使用法メッセージは省略)

4

2 に答える 2

0

StringコマンドをStringarrayコマンドに変更することで、問題を解決することができました。そのため、Gobblerの使用は冗長になりました。

于 2013-02-17T19:37:16.123 に答える
-1

これは、出力ストリームから読み取っていないことが原因である可能性があります。バッファがいっぱいになるとブロックされます。これを読んでください。CommonsExec
のようなものを使用することをお勧めします。 また、パイプ()を使用するのに疲れているという問題もあります。これは、bash構造であり、機能しません。Javaでファイルから を作成し、それをコードでとして設定する必要があります。この例を見てください。
<
FileInputStreamInputStream

于 2013-02-17T15:07:51.507 に答える