org.postgresql.util.PSQLException - 2019

org.postgresql.util.PSQLException - 2019

我正在尝试通过 Cucumber(Java) 自动化我的 API 和数据库测试 (postgresql)。 我是如何编写代码并尝试执行以下查询的:

resultSet=statement.executeQuery("select * from rules_data.postcode_leadtime where postcode = "+postcodedistrict.toUpperCase()+"  and order_type = "+ordertype.toUpperCase()+"");

现在,如果我 运行 直接查询即 -

select * 
from rules_data.postcode_leadtime 
where postcode = 'MK9'  
  and order_type = 'ADSI' 

它 运行 非常好,但是当我 运行 上面的带有参数的查询时,它给出了以下错误:

org.postgresql.util.PSQLException: ERROR: column "mk9" does not exist

我用谷歌搜索了一下,发现执行命令时它必须是大写字母,所以我确保它被转换为大写字母,正如你在上面查询的参数中看到的那样,但我仍然我遇到了同样的问题。也发生在我的其他命令中。

注意:我试过打印参数值,它们都是大写的。

我遇到的另一个问题是以下查询:

resultSet=statement.executeQuery("select day from rules_data.hub_workdays where hub_id = " + hub + " and available = 'N'");

这里的 hub 是一个整数值,它在打印时很好,但是通过 Java 执行时会出现以下错误:

org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer

但是当我 运行 有值时它工作正常。

select day 
from rules_data.hub_workdays 
where hub_id = '593' 
and available = 'N'

我第一次解释的时候已经提到了

你真的应该像评论中写的那样使用 PreparedStatement,但你的错误可以通过以下修复消失:

resultSet=statement.executeQuery("select * from rules_data.postcode_leadtime 
                                 where postcode = '"+postcodedistrict.toUpperCase()+"'   
                                 and order_type = '"+ordertype.toUpperCase()+"'");

基本上你需要加单引号让参数变成strings