有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用Java exec的postgresql额外psql命令行参数

我正在使用Lehigh基准数据集作为测试数据,对postgres查询的命令行执行与JDBC进行一些基准测试,包括它们的测试查询

除了尝试使用psql执行单个字符串查询外,其他一切都正常工作

查询是我正在创建和执行的字符串

Runtime.getRuntime().exec("time ./psql  -U lehigh -d lehigh  -c 'SELECT u.id FROM undergraduatestudent u;';")

它在mac命令行上运行良好,但在Java中运行时,会出现以下错误:

---> psql: warning: extra command-line argument "u.id" ignored
---> psql: warning: extra command-line argument "FROM" ignored
---> psql: warning: extra command-line argument "undergraduatestudent" ignored
---> psql: warning: extra command-line argument "u;';" ignored
---> ERROR:  unterminated quoted string at or near "'SELECT"
---> LINE 1: 'SELECT
--->         ^

基本上,“SELECT”之后的所有内容都不会被识别为查询的一部分。有14个查询发生了这种情况,但这是最短的一个,足以解决问题

我试着把-U和-d移到后面,正如在另一篇文章中建议的那样,但我得到了相同的结果

我在Capitan的Mac上运行Eclipse(尽管我不相信这两种东西都会对事情产生影响)

我知道-f选项,但每次查询我都要计时,所以我更喜欢-c选项


共 (1) 个答案

  1. # 1 楼答案

    据我所知,exec(String)使用空格作为分隔符,因此您的查询不会被视为单个参数,而是一组参数(“SELECT、u.id、FROM、undergradestudent和u;”)

    尝试使用exec(字符串[])版本,其中字符串[]如下所示:

    {"time", "./psql", "-U", "lehigh", "-d", "lehigh",  "-c", "'SELECT", "u.id", "FROM", "undergraduatestudent u;'"}`
    

    或者,最好使用ProcessBuilder:

    new ProcessBuilder(new String[]{"time", "./psql", "-U", "lehigh", "-d", "lehigh",  "-c", "'SELECT", "u.id", "FROM", "undergraduatestudent u;'"}).start();