内容提要
文章讨论了在使用IBM WebSphere和DB2数据库的Java应用中遇到的mybatis查询失败问题,错误代码-774与数据库连接池异常有关,分析发现是DB2的一个bug导致的。迁移到Tomcat后,问题得到解决,同时提到迁移过程中遇到的字符编码和数据库函数调用问题。
关键要点
-
Java应用使用IBM WebSphere和DB2数据库,遇到mybatis查询失败问题,错误代码为-774。
-
sqlcode=-774表示语句不能在复合SQL中执行,sqlstate=2D522表示ATOMIC复合语句中不允许COMMIT和ROLLBACK,初步判断与数据库事务相关。
-
问题在中午13:00后稳定复现,14:30后消失,重启应用程序后报错消失,推测与数据库连接池中的连接异常有关。
-
迁移到Tomcat后,发现DB2的一个bug导致存储过程被客户端取消后,使用同一连接执行SQL会报错-774。
-
解决方案包括配置Tomcat的server.xml和context.xml,确保数据库连接正常。
-
迁移过程中遇到字符编码问题,原项目使用GBK编码,迁移后应继续使用GBK,而不是尝试转换为UTF-8。
-
迁移DB2数据库时需注意表缺失和数据量不匹配,使用jdbcurl的currentSchema和currentFunctionPath参数可简化查询。
延伸问答
在使用IBM DB2时,错误代码-774表示什么?
错误代码-774表示语句不能在复合SQL中执行,sqlstate=2D522表示ATOMIC复合语句中不允许COMMIT和ROLLBACK。
为什么在特定时间段内mybatis查询会失败?
在中午13:00后,数据库连接池中的连接可能处于异常状态,导致mybatis查询失败,14:30后问题消失可能与连接恢复正常有关。
如何解决DB2数据库连接池异常的问题?
迁移到Tomcat后,需配置server.xml和context.xml,确保数据库连接正常,并处理DB2的bug。
迁移项目时字符编码应如何处理?
迁移项目时应继续使用GBK编码,而不是尝试转换为UTF-8,以避免乱码问题。
在迁移DB2数据库时需要注意哪些问题?
需要注意表缺失和数据量不匹配,使用jdbcurl的currentSchema和currentFunctionPath参数可简化查询。
DB2数据库的bug是什么,如何影响查询?
DB2的bug导致存储过程被客户端取消后,使用同一连接执行SQL会报错-774,影响查询的正常执行。