我有一个过程,我希望从查询格式后从用户传递的jdbc中传递确切的值。
但是当我使用带有$$的preparedstatement时,它给出了一个错误说:
org.postgresql.util.PSQLException: The column index is out of range: 3, number of columns: 2.
然而,如果没有$$,它的工作完全正常。请帮助我如何通过预表示传递与$$的参数?
conn = DriverManager.getConnection(jdbcUrl, username, password);
String prepareselectSQL="SELECT get_sum(?,?,$$?$$)";
stmt=conn.prepareStatement(prepareselectSQL);
stmt.setInt(1,10);
stmt.setInt(2,200);
stmt.setString(3,"");
rs = stmt.executeQuery();
while (rs.next()) {
System.out.println(rs.getString(1));
}
见下面是我的示例查询:
select * from getdashboarddata_010('application','(upload + download)',?,'2018-02-05 00:00:00','2018-02-05 00:00:00','0','5-1','','hits','desc','','true');
下面是需要替换的值? :
(select * , ''::text as srczonename, ''::text as srczonetype, ''::text as firewall_cat_type, ''::text as destzonename, ''::text as destzonetype , null::int as appresolver from fwapp_applicationutfv5_12hr ) fwapp_applicationutfv5_12hr where "5mintime" >='2018-05-04 00:00:00' and "5mintime" < '2018-05-04 23:59:59'
所以,你可以看到我的值已经包含单引号,因为我需要在prepare语句中以美元引用传递它。
答案 0 :(得分:2)
我认为你正试图使用&#34;引用的美元&#34; string literal,并将参数替换为字符串。你不能在SQL字符串文字中做?
。在SQL字符串文字中,美元字符不会被识别为参数占位符。 (这只是一个普通的字面值美元字符......在字符串中。)
如果你需要做一些需要组装字符串值的东西,你应该在Java中进行汇编。像这样:
String sql = "SELECT get_sum(?, ?, ?)";
stmt = conn.prepareStatement(sql);
stmt.setInt(1, 10);
stmt.setInt(2, 200);
stmt.setString(3, "'" + someString + "'");
以上内容将以'
字符开头和结尾的字符串值传递给SQL get_sum
存储过程。