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 "" identifies a prepared statement that is
      not a SELECT or VALUES statement.

Explanation:

The cursor "" 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 "" 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

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