达梦数据库(DM),执行查询语句报错 Cannot cast dm.jdbc.driver.DmdbConnection原创
金蝶云社区-取个名字区分下
取个名字区分下
7人赞赏了该文章 231次浏览 未经作者许可,禁止转载编辑于2024年11月23日 14:29:41

记一次达梦数据库排查问题的过程:

苍穹数据库切换到达梦数据库后,执行查询时代码报错,

kd.bos.exception.KDException: Cannot cast dm.jdbc.driver.DmdbConnection to oracle.jdbc.OracleConnection

具体如下图:

image.png

经过多次debug后,发现是因为要执行的sql中: 

/*ORM*/ SELECT A.FId "id" FROM t_xxx_sort A WHERE A.fobjectid = ? AND A.fxxxxid = ?;

传进去对应的参数一个是数组,一个字符串,导致苍穹底层在做sql预处理时,报错了,报Cannot cast dm.jdbc.driver.DmdbConnection to oracle.jdbc.OracleConnection错误。查看代码也发现确实是在创建QFilter的时候用的QCP.equals,传进去的参数是一个数组集合,附上代码截图:

image.png

截图里appPks是个一个Set<String>集合。

解决办法:

将QFilter中的QCP.equals修改为QCP.in,即可


ps:以前没切换成达梦数据库时,使用的mysql,这么写是没报错的,功能也正常,但其实原本的代码是有问题的,只是使用mysql时底层转换没有报错。

图标赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
图标打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!