接到一个做工厂项目的需求,在做完mes系统的功能模块后,被安排做一个将数据同步到数据工厂系统然后图表展示的功能,由于以前的数据同步我都是多是用的ETL工具kettle等,这次是因为数据工厂项目要求有数据同步功能,能够在其页面写入自定义SQL,后端根据自定义SQL获取数据集,并将数据集插入到数据工厂的目标表;
前端页面配置数据库连接参数、操作的表、自定义SQL参数等保存到数据库的同步任务表,等定时任务或手动触发任务时,使用这些参数信息获取数据集,然后插入到数据工厂的新建的目标表;
前端页面:

触发了同步任务的时候,后端调用的方法:




同步方法sync调用的执行SQL语句的executeQuery方法(本文要记录的踩坑点便是在此方法中)

将结果集插入目标库的方法



完成了代码后,测试时用类似于一下的SQL是正常的
但是,等到写实际业务要求下的SQL时,代码报错了,插入失败,找不到这个字段???

查询数据集的SQL代码:
一开始,还以为是查询SQL写错了,然而,当我检查了SQL,并下断点,获取到数据集时才发现,王德发,这个字段名怎么回事?

明明已经取别名了,怎么会还是原来的名字呢???

作为一名面向搜索引擎的CV工程师,百度一下,原来是因为 ResultSetMetaData 提供的是关于结果集元数据的信息,而这些信息通常是基于数据库表结构的,而不是基于查询的具体实现细节。具体来说,getColumnName 方法返回的是数据库中定义的列名,而不是查询中使用的别名;
原来如此,ResultSetMetaData 这个类的获取列名还区分原始名称和别名两个方法;既然如此,如果我的SQL代码中字段不给别名,然后又使用getColumnLabel 这样的话能取到字段名吗?
我立马把SQL修改试了一下

结果是取的是原始名。。。

这样的话 getColumnName 方法的作用是啥或者说这个方法还有必要存在吗?不论什么情况都用 getColumnLabel 不就好了吗?
927

被折叠的 条评论
为什么被折叠?



