我尝试在Java和db2的SQL查询中使用命名参数标记,如下所示:
SELECT ...
FROM mytable c ...
WHERE c.id_field = :myParam
我将连接配置为:
Properties properties = new Properties(); // Create Properties object
properties.put("user", config.getDbUser()); // Set user ID for connection
properties.put("password", bdPassword); // Set password for connection
properties.put("enableNamedParameterMarkers", 1);
currentConnection = (DB2Connection) DriverManager.getConnection(config.getDbUrl(), properties);
我用这个查询创建了一个DB2 PreparedStatement,并按如下方式设置值:
DB2PreparedStatement ps = (DB2PreparedStatement) currentConnection.prepareStatement(sqlString);
ps.setJccStringAtName("myParam", "value");
但我得到下一个错误:
Error: com.ibm.db2.jcc.am.SqlSyntaxErrorException:
[jcc][10448][12695][4.19.66] Parameter marker 'myParam' was not present in the SQL String. ERRORCODE=-4461, SQLSTATE=42815
我猜不出为什么会这样。
其他数据:
<dependency>
<groupId>com.ibm.db2</groupId>
<artifactId>db2jcc</artifactId>
<version>4.19.66</version>
</dependency>
用于JDBC和SQLJ的IBM数据服务器驱动程序4.19.66
从系统版本中选择版本号
| 版本号|
| - -|
| -10050900年|
| 小行星9070900|
| 小行星10050800|
| 小行星1005|
| 小行星11010|
| 小行星11010|
| 小行星110507|
2条答案
按热度按时间olmpazwi1#
请尝试:
而不是:
knpiaxh12#
你的问题没有显示你的真实的代码,所以我无法猜测你犯了什么错误或遗漏。
只要您遵循文档中的规则,并且使用当前支持的Db2-server版本和当前支持的type 4 db2jcc4.jar驱动程序版本,命名参数就可以很好地与
DB2PreparedStatement
配合使用。IBM在
TbSel.java
文件中提供了一个工作示例,说明如何将命名参数标记与Type-4 jdbc连接一起使用。示例代码是here,位于github上,Db2-LUW服务器的
~$DB2INSTANCE/sqllib/samples/java/jdbc
目录中(如果安装了示例程序)。您可以研究这些代码以及示例附带的自述文件,然后自己构建它们。在该示例代码中,IBM通过编程方式启用了命名参数标记:(您也可以通过连接字符串属性
;enableNamedParameterMarkers=1;
来启用它们您可能希望学习这个示例代码以及IBM提供的所有其他jdbc示例,并使它们正常工作。这是一种学习方法。