1

我想使用java Java程序执行sql脚本是:

import java.io.*;
public class script{

public static void main(String argv[]) {

try {
  String line;
  Process p = Runtime.getRuntime().exec ("psql -U mit -d d980 -h tpeux250.sgp.st.com -f C:/java program/script.sql");
  BufferedReader input =new BufferedReader(new InputStreamReader(p.getInputStream()));

  while ((line = input.readLine()) != null) {        
    System.out.println(line);
  }
  input.close();
} catch (Exception err) {
  err.printStackTrace();
}

}

但我收到以下错误

java.io.IOException:Cannot run program "psql": CreateProcess error=2, The system cannot find the file specified
       at java.lang.ProcessBuilder.start<Unknown Source>
       at java.lang.Runtime.exec<Unknown Source>
       at java.lang.Runtime.exec<Unknown Source>
       at java.lang.Runtime.exec<Unknown Source>
       at script.main<script.java:8>
4

3 回答 3

2

实际psql二进制文件所在的位置不在您的PATH环境变量中。

要验证从终端运行以下命令。

echo %PATH%

如果psql bin目录丢失,请将其添加到您的路径中,如下所示

set PATH = %PATH%;"C:\Program Files\PostgreSQL\9.2\bin"

并尝试psql再次从终端运行您的脚本。如果这解决了您的问题,请bin永久添加目录(您必须这样做,因为您的 Java 程序在不同的终端中运行)

我的电脑 > 属性 > 高级系统设置(在左窗格中)。选择底部的环境变量并修改 PATH 以在“;”之后添加您的 psql“bin”目录 在最后。

于 2013-06-11T11:47:54.927 回答
0

在从 java 运行命令之前,请尝试在终端中执行它。我看到 C:/java 程序并希望它是 Windows go to run(windows+R) and execute cmd。在终端中尝试执行您的命令。在 Windows 中尝试反斜杠而不是正斜杠

C:\>cd "c:\Program Files"

是成功的,而

 C:\Program Files>cd "c:/Program Files"
    The system cannot find the path specified.

不是。所以使用C:\java program\script.sql

于 2013-06-11T11:51:09.877 回答
-2

用这个

Process p = Runtime.getRuntime().exec ("cmd.exe /c psql -U mit -d d980 -h tpeux250.sgp.st.com -f C:/java program/script.sql");
于 2013-06-11T11:47:30.163 回答