Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Derby db导出为sql文件_Java_Database_Export_Derby - Fatal编程技术网

Java 将Derby db导出为sql文件

Java 将Derby db导出为sql文件,java,database,export,derby,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:/m

我在“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。

当您启动一个新的子进程而它不工作时,您应该输出输出和错误流。您说过没有输出,但我认为您没有得到流程的输出流

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

当您启动一个新的子进程而它不工作时,您应该输出输出和错误流。您说过没有输出,但我认为您没有得到流程的输出流

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

同一个命令是否在命令行中工作?您是否读取进程的输出和错误流?是否有任何错误?dblook将只导出您的“模式”——一组或
创建表
创建索引
创建视图
,等等语句——而不是数据库表本身。听起来你想备份数据库?:vanje:没有错误,没有输出,什么都没有。我在cmd中使用了这个命令,它可以工作:dblook-d'jdbc:derby:d:/Dev/workspaces/workspacePro/School FinMa/School FinMa'-o'myDB_DDL.sql',但我希望应用程序(用户)能够从命令行执行此操作,而不是从命令行执行此操作。:bryan那么,我如何才能像您所说的那样进行完全备份?“同一个命令从命令行运行吗?”不,它打印:错误:找不到或无法加载主类org.apache.derby.tools.dblook命令行中的命令是否相同?您是否读取进程的输出和错误流?是否有任何错误?dblook将只导出您的“模式”——一组或
创建表
创建索引
创建视图
,等等语句——而不是数据库表本身。听起来你想备份数据库?:vanje:没有错误,没有输出,什么都没有。我在cmd中使用了这个命令,它可以工作:dblook-d'jdbc:derby:d:/Dev/workspaces/workspacePro/School FinMa/School FinMa'-o'myDB_DDL.sql',但我希望应用程序(用户)能够从命令行执行此操作,而不是从命令行执行此操作。:bryan那么,我如何才能像您所说的那样进行完全备份?“同一个命令从命令行运行吗?”不,它打印:错误:无法找到或加载主类org.apache.derby.tools.dblookThank。但是备份中没有数据,只有模式。谢谢。但是备份中没有数据,只有模式。