新しいサブプロセスを開始しても機能しない場合は、出力ストリームとエラーストリームを出力する必要があります。あなたは出力がないと言いましたが、あなたはプロセスの出力ストリームを取得していないと思います。
Javaサブプロセスを実行するときは、コマンドラインと同じようにクラスパスを追加する必要があります。この場合、derby.jar
とderbytools.jar
を追加する必要があります。ネットワーク接続の場合はderbyclient.jar
も必要です。
Windowsを使用しています。次に、一重引用符は使用しないでください。
出力ストリームとエラーストリームをコンソールに出力する、単純な実行例です。エラーがなければ出力はありません。しかし、一重引用符で試してください。エラーメッセージが表示されます。
この例では、Derby JARは、e:\derby\lib
にあります。
public static void copyStream(InputStream in, OutputStream out) throws IOException {
final byte[] buffer = new byte[1024];
int bytesRead = 0;
while((bytesRead = in.read(buffer)) != -1) {
out.write(buffer, 0, bytesRead);
}
}
public static void main(String[] args) throws IOException, InterruptedException {
Process process = Runtime.getRuntime().exec(
"java -cp e:\\derby\\lib\\derby.jar;e:\\derby\\lib\\derbyclient.jar;e:\\derby\\lib\\derbytools.jar org.apache.derby.tools.dblook -d jdbc:derby:D:/Dev/workspaces/workspacePro/School-FinMa/school-finma -o E:/myDB_DDL.sql");
final int exitValue = process.waitFor();
System.out.println("Exit value: " + exitValue);
System.out.println("Outputstream: ");
copyStream(process.getInputStream(), System.out);
System.out.println("Errorstream: ");
copyStream(process.getErrorStream(), System.out);
}
コマンドラインから同じコマンドを使用していますか?プロセスの出力ストリームとエラーストリームを読んでいますか?何か間違いはありますか? – vanje
dblookはデータベーステーブルそのものではなく、束または 'CREATE TABLE'、' CREATE INDEX'、 'CREATE VIEW'などの文だけをエクスポートします。データベースの**バックアップ**を作成するように思えますか? –
:vanje:エラーは出力されず、何もありません。 dblook -d 'jdbc:derby:D:/ Dev/workspaces/workspacePro/School-FinMa/school-finma' -o 'myDB_DDL.sql'しかし、私はアプリケーション(ユーザ)を必要とします。コマンドラインからこれを行うことはできません。 – usertest