从Java解密DB2 -302错误的最佳方法是什么?

时间:2014-10-09 13:15:33

标签: db2 jdbctemplate

我收到此错误,为单个记录运行插入查询:

  

DB2 SQL错误:SQLCODE = -302,SQLSTATE = 22001,SQLERRMC = null,   DRIVER = 3.62.56

     

异常:org.springframework.dao.DataIntegrityViolationException

我在IBM的帮助网站上看了这个,但是没有参数索引,我被困住了。 SQL状态似乎也指出它不是一个太大的值。

使用Spring的INSERT INTO [[TABLE_NAME]] VALUES (?,?,?,...)查询格式为JdbcTemplate.update(String sql, Object... params)

这是为了工作,我不能发布架构或查询。我正在寻找调试此问题的一般建议。我已经知道使用Arrays.toString(Object[])不会以SQL格式打印出来。

2 个答案:

答案 0 :(得分:0)

要在手册中找到SQLCODE -302的解释,您需要搜索SQL0302N(DB2 SQLCODE值的一般规则是:“SQL”加上四位数,必要时用左边的零填充,再加上“N” “for”negative“因为-302是负数。”

如果安装了DB2命令行处理器,还可以使用它来查找错误代码:

db2 ? sql302

会产生类似这样的东西:

  

SQL0302N EXECUTE或OPEN中主机变量的值   声明         超出其相应用途的范围。

     

说明:

     

发现输入主机变量的值超出范围   它在SELECT,VALUES或预处理语句中的使用。

换句话说,INSERT中的一个绑定变量对于目标列来说太大了。您需要将表列定义与您尝试插入的实际值进行比较。

答案 1 :(得分:0)

除了mustaccio的答案,您还可以使用SYSPROC.SQLERRM从sql获取信息。例如:

values SYSPROC.SQLERRM ('SQL302', '', '', 'en_US', 0)

SQL0302N  The value of a host variable in the EXECUTE or OPEN statement
  is out of range for its corresponding use.

Explanation:
...