DB2 SQL error: SQLCODE: -517问题 原因排查和解决方法

SQLCODE -517报错:

 

com.ibm.db2.jcc.c.SqlException: DB2 SQL error: SQLCODE: -517, SQLSTATE: 07005, SQLERRMC: SQL_CURSH200C1
at com.ibm.db2.jcc.c.fg.e(fg.java:1596)
at com.ibm.db2.jcc.c.fg.a(fg.java:1225)
at com.ibm.db2.jcc.b.gb.n(gb.java:718)
at com.ibm.db2.jcc.b.gb.i(gb.java:255)
at com.ibm.db2.jcc.b.gb.c(gb.java:53)
at com.ibm.db2.jcc.b.w.c(w.java:46)
at com.ibm.db2.jcc.b.vb.h(vb.java:151)
at com.ibm.db2.jcc.c.fg.p(fg.java:1220)
at com.ibm.db2.jcc.c.gg.d(gg.java:2316)
at com.ibm.db2.jcc.c.gg.W(gg.java:457)
at com.ibm.db2.jcc.c.gg.executeUpdate(gg.java:440)

 

IBM官方说明:

SQL0517N  The cursor "<name>" identifies a prepared statement that is
      not a SELECT or VALUES statement.

Explanation:

The cursor "<name>" could not be used as specified because the prepared
statement named in the cursor declaration was not a SELECT or VALUES
statement.

The statement cannot be processed.

User response:

Verify that the statement name is specified correctly in the PREPARE and
the DECLARE CURSOR for cursor "<name>" statements. Or correct the
program to ensure that only prepared SELECT or VALUES statements are
used in association with cursor declarations.

 sqlcode: -517

 sqlstate: 07005

SQL0517N

 

游标 名称 标识一个并非 SELECT 或 VALUES 语句的预编译语句。

说明

因为游标声明中指定的预编译语句不是 SELECT 或 VALUES 语句,所以游标 名称 未能像指定的那样使用。

无法处理该语句。

用户响应

验证是否在 PREPARE 和 DECLARE CURSOR 中为游标 名称 语句正确指定了语句名。或者更正程序,以确保仅将预编译的 SELECT 或 VALUES 语句与游标声明配合使用。

sqlcode:-517

sqlstate:07005

 

即未预编译的语句,无法关联游标,所以执行失败。

排查方法:

1、检查访问数据库是否使用的是PreparedStatement

2、检查是否设置了对象的类型和数据库表字段的类型一致

3、检查JDBC连接的url

XXXdb.connection.url=jdbc:db2://192.168.1.1:50000/xxxDB:deferPrepares=false;currentSchema=XXX

是否包括deferPrepares=false

 

解决方案:

1、PreparedStatement改为Statement

2、保持类型一致

3、JDBC连接设置为deferPrepares=false

你可能感兴趣的:(sql,jdbc,db2,sqlcode -517)