我使用Lehigh Benchmark数据集作为测试数据,包括他们的测试查询,对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选项。
答案 0 :(得分:0)
据我所知,exec(String)使用空格作为分隔符,因此您的查询不会被视为单个参数,而是作为一组参数(' SELECT,u.id,FROM) ,undergraduatestudent,和你;')。
尝试使用exec(String [])版本,其中String []是这样的:
{"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();