【问题标题】:Export Derby db as a sql file将 Derby db 导出为 sql 文件
【发布时间】:2016-06-30 13:25:50
【问题描述】:

我在“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'");

但是什么也没发生,就好像这段代码不存在一样。

我想要一种将数据库导出到单个 .sql 文件的方法,该文件包含所有数据库生成代码 + 数据。我怎样才能在 Java 中做到这一点??

项目(在 Eclipse 中)已导入 derbytools.jar。

【问题讨论】:

  • 命令行中是否有相同的命令?你读过进程的输出和错误流吗?有没有错误?
  • dblook 只会导出您的“模式”——一堆或CREATE TABLECREATE INDEXCREATE VIEW 等语句——而不是数据库表本身。听起来您想备份您的数据库?
  • :vanje: 没有错误没有输出,什么都没有。我在 cmd 中使用了这个命令,它可以工作: dblook -d 'jdbc:derby:D:/Dev/workspaces/workspacePro/School-FinMa/school-finma' -o 'myDB_DDL.sql' 但我想要应用程序(用户)能够从命令行做到这一点不是我。
  • :bryan 那么我怎么才能像你说的那样做完整备份呢?
  • "命令行中是否有相同的命令?"不,它打印:错误:无法找到或加载主类 org.apache.derby.tools.dblook

标签: java database export derby


【解决方案1】:

当您启动一个新的子流程并且它不起作用时,您应该输出输出和错误流。你说没有输出,但我想你没有得到进程的输出流。

在运行 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);
}

【讨论】:

  • 谢谢。但备份中没有数据,只有架构。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-27
  • 1970-01-01
  • 1970-01-01
  • 2015-02-04
  • 2013-07-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多