Wenn Sie einen neuen Unterprozess starten und es nicht funktioniert, sollten Sie die Ausgabe- und Fehlerströme ausgeben. Sie haben gesagt, dass es keine Ausgabe gibt, aber ich denke, Sie haben den Ausgabestream des Prozesses nicht erhalten.
Wenn Sie einen Java-Unterprozess ausführen, sollten Sie den Klassenpfad wie in der Befehlszeile hinzufügen. In diesem Fall sollten Sie derby.jar
und derbytools.jar
hinzufügen. Für eine Netzwerkverbindung benötigen Sie auch derbyclient.jar
.
Sie verwenden Windows. Verwenden Sie keine einfachen Anführungszeichen.
Hier ist ein einfaches Beispiel, das den Ausgabe- und Fehlerdatenstrom an die Konsole ausgibt. Ohne einen Fehler gibt es keine Ausgabe. Aber versuchen Sie es mit einfachen Anführungszeichen, Sie sehen eine Fehlermeldung. In diesem Beispiel befinden sich die Derby-JARs unter: 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);
}
Funktioniert der gleiche Befehl von der Befehlszeile? Lesen Sie die Ausgabe- und Fehlerströme des Prozesses? Gibt es Fehler? – vanje
dblook exportiert nur Ihre "schema" - Bündel oder 'CREATE TABLE',' CREATE INDEX', 'CREATE VIEW' usw. - nicht die Datenbanktabellen selbst. Es klingt, als würdest du gerne eine ** Sicherung ** deiner Datenbank machen? –
: vanje: es gibt keinen Fehler, keine Ausgabe, nichts. Ich habe diesen Befehl in cmd verwendet und es funktioniert: dblook -d 'jdbc: derby: D:/Dev/Arbeitsbereiche/workspacePro/School-FinMa/Schule-Finma' -o 'myDB_DDL.sql' Aber ich möchte die Anwendung (Benutzer) das kann ich nicht von der Kommandozeile aus tun. – usertest