java—与processbuilder一起更改环境变量的问题

a6b3iqyw  于 2021-06-30  发布在  Java
关注(0)|答案(2)|浏览(447)

我正在尝试使用processbuilder运行连接到数据库的EXE程序。在我的windows配置中,defaut环境变量是username的“paul”,但是连接到数据库的用户应该是“postgres”。
我可以在windows 10的“命令窗口”中运行此命令:c:\program files\bin\ogr2ogr.exe-f“esri shapefile”c:\temp\mydata.shp pg:“host=127.0.0.1 user=postgres dbname=mydbname password=mypassword”“mytable”
在java中,我尝试这样做:

Public void exec(){
    command = new String[] {C:\\Program Files\\bin\\ogr2ogr.exe", 
    "-f", "\"ESRI Shapefile\"", 
    "C:\\Temp\\mydata.shp", 
    "PG:\"host="127.0.0.1 user=postgres dbname=mydbname password=mypassword\"",
    "\"mytable\""};
    ProcessBuilder pb = new ProcessBuilder(command);
    pb.redirectErrorStream(true);
    pb.environment().remove("USERNAME");
    pb.environment().put("USERNAME", "postgres");

    Process p = pb.start();
    BufferedReader bufIn = new BufferedReader(new InputStreamReader(p.getInputStream()));
    String str1 = null;
    while ((str1= bufIn.readLine()) != null) {
        textOutput.append(str1 + "\n");
        System.out.println(str1 + "\n");
    }
}

当我调试并检查processbulider pb的环境变量时,在pb.start()之前,我可以看到username=postgres
我得到的输出是:错误1:pqconnectdb失败。致命:角色“保罗”不存在
如果有人能告诉我我做错了什么,我会很感激的。谨致问候,保罗

rbl8hiat

rbl8hiat1#

根据
是否重写windows环境变量值?
用户名不能这么容易被覆盖。。。
你的代码很好,但是用户名在windows上有点特殊,否则你可以用系统上的任何用户运行你的应用程序

uemypmqf

uemypmqf2#

如果改用process:process process=runtime.getruntime().exec(新字符串[]{“cmd.exe”,“/c”,c:\progra~1\bin\ogr2ogr.exe-f“esri shapefile”“c:\temp\mydata.shp”“pg:”host=127.0.0.1 user=postgres password=mypassword dbname=mydbname”“mytable”});
效果不错!!!但是我必须使用路径的简称:c:\ProgramFiles,这在使用processbuilder时是不必要的。。。。我想知道有什么不同?

相关问题