2016-06-30 2 views
1

「D:/ Dev/workspaces/workspacePro/School-FinMa/school-finma」にderby dbがあります。私はそれをこのフォルダ "E:/"にエクスポートしたいと思います。だから私はこれを実行する:Derby dbをSQLファイルとしてエクスポート

Runtime.getRuntime().exec("java org.apache.derby.tools.dblook -d 'jdbc:derby:D:/Dev/workspaces/workspacePro/School-FinMa/school-finma' -o 'E:/myDB_DDL.sql'"); 

しかし、このコードが存在しない場合は、何も起こりません。

dbをすべてのdb生成コード+データを含む単一の.sqlファイルにエクスポートする方法が必要です。どのように私はJava内部からそれを行うことができますか?

プロジェクト(eclipse)には、derbytools.jarがインポートされています。

+0

コマンドラインから同じコマンドを使用していますか?プロセスの出力ストリームとエラーストリームを読んでいますか?何か間違いはありますか? – vanje

+0

dblookはデータベーステーブルそのものではなく、束または 'CREATE TABLE'、' CREATE INDEX'、 'CREATE VIEW'などの文だけをエクスポートします。データベースの**バックアップ**を作成するように思えますか? –

+0

:vanje:エラーは出力されず、何もありません。 dblook -d 'jdbc:derby:D:/ Dev/workspaces/workspacePro/School-FinMa/school-finma' -o 'myDB_DDL.sql'しかし、私はアプリケーション(ユーザ)を必要とします。コマンドラインからこれを行うことはできません。 – usertest

答えて

0

新しいサブプロセスを開始しても機能しない場合は、出力ストリームとエラーストリームを出力する必要があります。あなたは出力がないと言いましたが、あなたはプロセスの出力ストリームを取得していないと思います。

Javaサブプロセスを実行するときは、コマンドラインと同じようにクラスパスを追加する必要があります。この場合、derby.jarderbytools.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); 
} 
+0

ありがとうございました。しかし、バックアップにはデータは存在せず、スキーマのみが存在します。 –

関連する問題