Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/353.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
我如何使用ExpectJ在Java中调用pg_dump(在PostgreSQL 8.4上)?_Java_Postgresql_Expect_Expectj - Fatal编程技术网

我如何使用ExpectJ在Java中调用pg_dump(在PostgreSQL 8.4上)?

我如何使用ExpectJ在Java中调用pg_dump(在PostgreSQL 8.4上)?,java,postgresql,expect,expectj,Java,Postgresql,Expect,Expectj,我在很多地方都见过这个问题,也就是说,从PostgreSQL以编程方式进行备份的问题。我的解决方案是使用ExpectJ,但我在让代码正常工作方面遇到了困难 我有以下代码: public class BackupUtility { public static void main(String[] args) { try { ExpectJ exp = new ExpectJ(20); Spawn shell = exp.spawn("\"C:\\Program File

我在很多地方都见过这个问题,也就是说,从PostgreSQL以编程方式进行备份的问题。我的解决方案是使用ExpectJ,但我在让代码正常工作方面遇到了困难

我有以下代码:

public class BackupUtility 
{
 public static void main(String[] args)
 {

  try
  {
   ExpectJ exp = new ExpectJ(20);
   Spawn shell = exp.spawn("\"C:\\Program Files\\PostgreSQL\\8.4\\bin\\pg_dump.exe\" " +
                           "-h localhost -U myUserName myDB");
   shell.expect("Password: ");
   shell.send("myPassword");

   System.out.println(shell.getCurrentStandardOutContents());

   shell.expectClose()
  }
  catch (Exception e) 
  {
   e.printStackTrace();
  }   
 }
}
然而,在shell.expect行中,它正在超时

当我从命令提示符下运行此命令时,它如下所示:

C:\Documents and Settings\bobjonesthe3rd>“C:\Program Files\PostgreSQL\8.4\bin\pg\U dump”-h localhost-U myUserName myDB
密码:

因此,我知道它会提示输入密码,但出于某种原因,ExpectJ没有收到提示

任何帮助都将不胜感激

谢谢,
Matt

我很确定,不需要使用expect和send,通过。也在.

中引用,我没有访问实际PostgreSql安装的权限,因此使用.pgpass文件不是一个可行的选项。文章中的“localhost”主机只是一个例子。PostgreSQL通常会在另一台机器上运行。然后你会把事情弄得很复杂。如果您连接到的PG版本比您的PG_转储版本更新,则您的备份可能与您预期的不一样。以下是我们的设置:我们有一个使用PostgreSQL作为数据库服务器的桌面应用程序。根据安装程序的要求,用户必须安装PostgreSQL 8.4版。他们给我们服务器名和端口号,我们使用这些信息连接到他们的服务器。在我们的安装中,我们包括一个pg_dump实用程序的副本,并将其与服务器信息结合使用以进行备份。然而,所有这些都是无关紧要的。我的问题不是关于如何进行备份,而是关于如何使用ExpectJ.True,关于您询问ExpectJ,但是.pgpass文件确实存在于客户端而不是服务器上,因此它仍然是一个可行的选项。祝你好运。