邓羽平
骑士
骑士
  • UID280
  • 粉丝1
  • 关注2
  • 发帖数5
阅读:4855回复:0

国产数据库-虚谷-试用版ResultSet中查询语句别名问题

楼主#
更多 发布于:2019-10-12 18:20
1.背景
最近在使用Kettle对虚谷数据库进行数据查询时发现查询语句获取的数据集列名不正确,具体结果如下:

图片:1.png


可以看到,查询语句的别名失效了!
2.排查过程
通过编写java程序,验证该问题:

图片:2.png


        可以看到,虚谷ResultSetMetaData中getColunmName获取到的名称是列的原名而不是别名。
        这一点也在之后通过询问技术交流群得到证实,即试用版中的获取的列名是原列名而不是别名。而关于收费版,经询问北京同事,得到的反馈是并没有遇到这种问题。

        之后为了确定是JDBC客户端的问题还是数据库服务端的问题,首先登陆虚谷数据库所在的服务器,通过命令行的方式执行sql查询语句,结果如下:

图片:3.png

       可以确定,服务端是支持别名查询的。

        所以问题可能出现在JDBC的jar包里。
        通过反编译软件打开JDBC的jar包,定位到给columnName和columnLable赋值的地方:

图片:4.png



        然后在java程序中创建相同的包,并新建一个同名的类,在其中加入打印语句:

图片:5.png


        运行程序,进行查询,得到结果:

图片:6.png


        可以初步得出结论:fieldName保存的是原列名,而若存在别名,则fiieldLable为别名;若不存在别名,fieldLable为null;
3.解决方案
        可以对Field类做如下改动:

图片:7.png



        若存在别名,则将别名赋值给columnName,否则将fieldName赋值给columnName。
        在集成了虚谷JDBC驱动jar包的项目中创建该类,项目加载jar包的时候将修改过的把原来的覆盖掉,达到修复该问题的目的(若是付费版的虚谷数据库可能不会有该问题,此解决方案针对只是使用虚谷数据库进行学习测试用的场景)。
游客

返回顶部