mysql驱动取别名报Column ×× not found 解决办法

从mysql-connector-java-5.0.8-bin.jar升级到mysql-connector-java-5.1.18-bin.jar后,当select语句用到别名的时候报错:Column ×× not found 。
经查原因如下:
用apache beanutils包对resultSet进行dyanbean转换时发现别名无法识别
跟踪代码时发现mysql的jdbc实现的ResultSetMetaData.getColumnName(int column)方法中是这样的

public String getColumnName(int column) throws SQLException {
if (this.useOldAliasBehavior) {
return getField(column).getName();
}
String name = getField(column).getNameNoAliases();

if (name != null && name.length() == 0) {
return getField(column).getName();
}

return name;
}


其中this.useOldAliasBehavior 在执行过程中是false,也就是说会执行String name = getField(column).getNameNoAliases();方法

按照字面意思理解是从field中取非别名的名称,而Field.getNameNoAliases()的实现如下:

public String getNameNoAliases() throws SQLException {
if (this.useOldNameMetadata) {
return getName();
}

if (this.connection != null &&
this.connection.versionMeetsMinimum(4, 1, 0)) {
return getOriginalName();
}

return getName();
}


其中this.useOldNameMetadata也是false,因为版本号是5.1.29(数据库返回的信息),造成

if (this.connection != null &&
this.connection.versionMeetsMinimum(4, 1, 0)) {
return getOriginalName();
}


可以正常执行,返回结果return getOriginalName();
因此无法正常拿到别名。
可怜xubindehao兄问了良久没有得到有效解决方案,今天受他启发,终于找到办法了,已在他博客后留言相告。
解决方案如下:
连接串加参数:useOldAliasMetadataBehavior=true
示例:
url="jdbc:mysql://10.60.32.80:3306/paper2?characterEncoding=utf-8&useOldAliasMetadataBehavior=true"
ps:这个连接串配置在tomcat/conf/context.xml里面的Resource节点

SELECT B.PSN_NAME 人员姓名, B.GEND 性别, B.CERTNO 身份证号, B.FIXMEDINS_NAME 入院医疗机构全称, A.DSCG_MAINDIAG_NAME 住院主诊断名称, A.OTP_DIAG_INFO 门诊诊断信息, B.DISE_NAME 病种名称, B.EMP_NAME 单位名称, A.MEDRCDNO 病历号, B.FIXMEDINS_NAME 所住医院全称, B.BEGNDATE 住院日期, B.ENDDATE 出院日期, B.MEMO 备注, B.SETL_TYPE 结算方式 FROM mdtrt_d A WHERE EXISTS ( SELECT 1 FROM SETL_D B WHERE B.SETL_TIME >= '2019-01-01' AND B.VALI_FLAG = '1' AND B.REFD_SETL_FLAG = '0' AND B.PSN_NO IN ( '230000000000000005919149', '230000000000000004147717', '230000000000000004075857', '230000000000000004003712', '230000000000000020536598', '230000000000000015330649', '230000000000000006095711', '230000000000000015350525', '230000000000000001355191', '230000000000000005930187', '230000000000000004249647', '230000000000000002455673', '230000000000000036101449', '230000000000000039649952', '230000000000000004146316', '230000000000000020536815', '230000000000000042313942', '230000000000000005266637', '230000000000000020534731', '230000000000000003996664', '230000000000000005250801', '230000000000000015198315', '230000000000000004170072', '230000000000000015555280', '230000000000000014517248', '230000000000000004075696', '230000000000000003975512', '230000000000000017361309', '230000000000000003976686', '230000000000000004073825', '230000000000000003992655', '230000000000000020532308', '230000000000000031104014', '230000000000000001547891', '230000000000000033138378', '230000000000000003328700', '230000000000000039819802', '230000000000000015726076', '230000000000000020534568', '230000000000000003998894', '230000000000000003860234', '230000000000000001820888', '230000000000000015294180', '230000000000000028673480', '230000000000000031215068', '230000000000000035065863', '230000000000000003959262', '230000000000000004052095', '230000000000000015999150', '230000000000000015758053', '230000000000000017801318', '230000000000000042354299', '1096559621', '230000000000000031250263', '230000000000000032003626', '230000000000000013136927', '230000000000000003959317', '230000000000000003955027', '230000000000000021064371', '230000000000000011965176', '230000000000000001419606', '230000000000000004143536', '230000000000000020269477', '230000000000000002763116', '230000000000000004118496', '230000000000000004176108', '230000000000000017694097', '230000000000000004146326', '230000000000000003868003', '230000000000000003951660', '230000000000000004091390', '230000000000000003965711', '230000000000000004167668', '230000000000000002740423', '230000000000000017707519', '230000000000000028598155', '230000000000000031224275', '230000000000000004123720', '230000000000000003877908', '230000000000000032367015', '230000000000000012451490', '230000000000000004058934', '230000000000000003931153', '230000000000000020536935', '230000000000000037934698', '230000000000000003848703', '230000000000000004159305', '230000000000000004155643', '230000000000000003848741', '230000000000000004087008', '230000000000000004080451', '230000000000000004123197', '230000000000000015458570', '230000000000000003974375', '230000000000000040542791', '230000000000000034758930', '230000000000000004126595', '230000000000000003848324', '230000000000000004130814', '230000000000000036148737', '230000000000000004076106', '230000000000000004164374', '1094359750', '230000000000000031981085', '230000000000000004083380', '230000000000000015920244', '230000000000000004071775', '230000000000000004933102', '230000000000000003870532', '230000000000000043414600', '230000000000000028253490', '230000000000000004059822', '230000000000000020536547', '230000000000000004054739', '230000000000000004118808', '230000000000000004119481', '230000000000000041539192', '230000000000000001534690', '230000000000000004113768', '230000000000000004157643', '230000000000000004257892', '230000000000000017680529', '230000000000000015459507', '230000000000000033193587', '230000000000000004144960', '1095377758', '1094827429', '230000000000000004092338', '1095828500', '230000000000000003930323', '230000000000000016042639', '230000000000000029080992', '230000000000000004046598', '230000000000000004054821', '230000000000000004236020', '230000000000000027758229', '230000000000000001419646', '230000000000000031256094', '230000000000000004460532', '230000000000000002704870', '230000000000000004044221', '230000000000000004143910', '230000000000000015755230', '230000000000000020536553', '230000000000000031081254', '230000000000000033138778', '230000000000000006538129', '230000000000000004108442', '230000000000000004094772', '230000000000000004111476', '230000000000000020534498', '230000000000000034908651', '230000000000000004094046', '230000000000000006132479', '230000000000000004100090', '230000000000000033619420', '230000000000000015302519', '230000000000000002465052', '230000000000000015606649', '230000000000000031365334', '230000000000000004060662', '230000000000000004154713', '230000000000000020269469', '230000000000000004027416', '230000000000000003987244', '230000000000000029813327', '230000000000000003946574', '230000000000000039933390', '230000000000000015181873', '230000000000000004154411', '230000000000000015115874', '230000000000000004098466', '230000000000000003927688', '230000000000000004161663', '230000000000000016053453', '230000000000000000201703', '230000000000000004113693', '230000000000000004106009', '230000000000000003950740', '230000000000000015729767', '230000000000000004151474', '230000000000000004116716', '230000000000000032914581', '230000000000000032266781', '230000000000000003873009', '230000000000000008461233', '230000000000000017796027', '230000000000000032223559', '230000000000000003919446', '230000000000000004100723', '230000000000000003638787', '230000000000000003952507', '230000000000000004166866', '230000000000000015923829', '230000000000000020534468', '230000000000000031125438', '230000000000000004933007', '230000000000000004166136', '230000000000000000019495', '230000000000000015267706', '230000000000000004246093', '230000000000000003982991', '230000000000000004140593', '230000000000000033810988', '230000000000000039323571', '230000000000000004082204', '230000000000000004126664', '230000000000000004156746', '230000000000000003877641', '230000000000000004116043', '230000000000000004105566', '230000000000000004118909', '230000000000000019218079' ) AND A.mdtrt_id = B.mdtrt_id AND A.psn_no = B.psn_no ) 错Sql validate error, 'At line 0, column 0: Table 'B' not found'.
最新发布
06-10
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值