将Derby db导出为sql文件

时间:2016-06-30 13:25:50

标签: java database export derby

我在“D:/ Dev / workspaces / workspacePro / School-FinMa / school-finma”中有一个derby db。我想将其导出到此文件夹“E:/”。所以我运行这个:

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导出到单个.sql文件,该文件包含所有db生成代码+数据。我怎么能从Java里面做到这一点?

项目(在eclipse中)导入了derbytools.jar。

1 个答案:

答案 0 :(得分: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);
}