达梦数据库(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
具体如下图:
经过多次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,传进去的参数是一个数组集合,附上代码截图:
截图里appPks是个一个Set<String>集合。
解决办法:
将QFilter中的QCP.equals修改为QCP.in,即可
ps:以前没切换成达梦数据库时,使用的mysql,这么写是没报错的,功能也正常,但其实原本的代码是有问题的,只是使用mysql时底层转换没有报错。
赞 7
7人点赞
还没有人点赞,快来当第一个点赞的人吧!
打赏
0人打赏
还没有人打赏,快来当第一个打赏的人吧!
推荐阅读