我正在尝试执行SQL
使用 Java 进行查询PreparedStatement
在 Java 7 中使用以下代码:
PreparedStatement functionalCRsStatement = con.prepareStatement(
"select * from openquery(SERVER,\n" +
"\t'Select X , Y, Z, A from D r\n" +
"\tINNER JOIN E c\n" +
"\tON r.RNID = c.RNID\n" +
"\twhere c.Y = ?')\n");
functionalCRsStatement.setString(2, x);
我收到以下错误消息:com.microsoft.sqlserver.jdbc.SQLServerException: The index 2 is out of range.
PS:我确信 SQL 查询的正确性,因为我成功地测试了它,而没有PreparedStatement
,我只是用假列(X、Y、Z)替换了查询中列的真实名称,以隐藏潜在的机密信息。
EDIT: 我在使用时遇到类似的错误setString(1, x)
=> index 1 is out of range
正如 @JonK 评论的那样,你的查询中有撇号,这意味着你的参数实际上位于 SQL 引擎不会绑定值的字符串内(无论你使用 1 还是 2 作为索引):
PreparedStatement functionalCRsStatement = con.prepareStatement(
"select * from openquery(APRPRD,\n" +
"\t'Select X , Y, Z, A from D r\n" +
"\tINNER JOIN E c\n" +
"\tON r.RNID = c.RNID\n" +
"\twhere c.Y = ?')\n");
包含此查询(带有 SQL 语法突出显示,显示整个字符串)
select * from openquery(APRPRD,
'Select X , Y, Z, A from D r
INNER JOIN E c
ON r.RNID = c.RNID
where c.Y = ?')
SQL 引擎从不检查字符串的内部。否则如何插入包含问号的字符串?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)