通过Java启动的cmd中找不到Psql

时间:2019-06-03 19:24:53

标签: java postgresql cmd

我知道这个问题看起来与this有点相似,但是我的问题与Windows有关,并且是至关重要的。我有以下代码:

public static void main(String[] args) {
    //String command = "\"psql --version\"";
    String psqlPath = "\"C:\\Program Files\\PostgreSQL\\10\\bin\\psql.exe\"";
    String command = "\""+psqlPath+" --version \"";
    runPostgresqlTableCreator("start cmd.exe /k "+command);
}


private static void runPostgresqlTableCreator(String command) {
        ProcessBuilder processBuilder = new ProcessBuilder();
        processBuilder.command("cmd.exe", "/c", command);
        try {
            Process process = processBuilder.start();
            process.waitFor();
        } catch (Exception ex) {
            ex.printStackTrace();
        }
}

此代码使用psqlPath起作用,由此它启动cmd并将PostgresQL版本打印为psql (PostgreSQL) 10.7。但是,使用psql --version时,它表示'psql'不被识别为内部或外部命令, 可操作的程序或批处理文件。在我启动的cmd上运行psql --version也会打印出该版本。环境变量也已正确设置。通过提供的链接,答案表明Java似乎无法从环境变量识别psql路径(尽管String command = "\"java -version\""显示Java版本)。

对于Linux,放置/usr/local/bin/psql的完整路径是可以的,因为在大多数情况下,这始终是路径。但是,在Windows中,用户可以决定在任何目录和任何磁盘卷中安装PostgresQL,从而很难获得psql.exe的完整路径。在使用JavaFX的桌面应用程序项目中,我需要运行一些psql命令,但要运行其他命令而不是版本。我不希望在客户端可以在界面上放置psql.exe路径的地方。

因此,我的问题是,有一种解决方法可以使psql在不使用完整路径的情况下工作吗? (请注意,这不是我感兴趣的Postgresql版本。)

1 个答案:

答案 0 :(得分:0)

通过将psql的完整路径添加到系统变量中,可以每次不使用完整路径使用psql。您可以通过以下方法进行操作:转到控制面板,打开高级系统设置,单击系统变量中的“环境变量”,然后编辑环境变量。完成此操作后,只需键入“ psql”作为路径即可引用psql。

注意:请勿删除其他变量。将psql的路径添加到环境变量列表中。

这是一个Java文档,解释了如何添加到路径: https://www.java.com/en/download/help/path.xml

设置了环境变量后,您可以使用System.getenv(String name)方法读取它以访问特定变量。您还可以使用System.getenv()返回所有环境变量的映射图

System.getenv()JavaDoc:https://docs.oracle.com/javase/8/docs/api/java/lang/System.html#getenv--