db2 SQL字符串中不存在参数标记XXX

0qx6xfy6  于 2022-11-07  发布在  DB2
关注(0)|答案(2)|浏览(202)

我尝试在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|

olmpazwi

olmpazwi1#

请尝试:

properties.put("enableNamedParameterMarkers", "1");

而不是:

properties.put("enableNamedParameterMarkers", 1);
knpiaxh1

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;来启用它们

javax.sql.DataSource ds=null;
    ds=new com.ibm.db2.jcc.DB2SimpleDataSource();
    ...
    ((com.ibm.db2.jcc.DB2BaseDataSource) ds).setEnableNamedParameterMarkers(1);
    ..

您可能希望学习这个示例代码以及IBM提供的所有其他jdbc示例,并使它们正常工作。这是一种学习方法。

相关问题