项目上用的Spring JDBC,是通过ResultSetMetaData接口来调用具体数据库的JDBC实现类来获取数据库返回结果集的。

在项目开发中,发现在MySQL中使用的别名没有办法被正常解析,意思就是说,给字段另外赋予的别名没有生效,取的是字段原来的字段名。具体是比如给user_name取了个别名为user_name_old,最终返回的结果并不是别名user_name_old,而是原名user_name。

跟踪代码,发现在MySQL的JDBC实现中的ResultSetMetaData.getColumnName(int column)方法中存在一些特定的逻辑。

public String getColumnName(int column) throws SQLException {
  if (this.useOldAliasBehavior) { // false
    return this.getField(column).getName();
  } else {
    String name = this.getField(column).getNameNoAliases(); // 取非别名
    return name != null && name.length() == 0 ? this.getField(column).getName() : name;
  }
}

因为this.useOldAliasBehavior属性为false,因此最终走的是else的逻辑,也就走的是Field.getNameNoAliases()方法。

public String getNameNoAliases() throws SQLException {
  if (this.useOldNameMetadata) { // false
    return this.getName();
  } else {
    return this.connection != null && this.connection.versionMeetsMinimum(4, 1, 0) ? this.getOriginalName() : this.getName();
  }
}

因此我们最终把问题定位到this.useOldAliasBehavior属性上,这个属性是可以通过JDBC驱动地址配置的。

useOldAliasMetadataBehavior=true

完整的驱动地址应该是这样的:

jdbc:mysql://localhost/testDB?useUnicode=true&characterEncoding=UTF-8&zeroDateTimeBehavior=convertToNull&useOldAliasMetadataBehavior=true

添加上该属性,就会发现问题得到了解决。

"我不能悲伤地坐在你身旁。"

最新文章

  1. DoTween 教程
  2. JS总结 节点
  3. Angularjs学习笔记(四)----与后端服务器通信
  4. Javascript模块化编程笔记
  5. SQLite介绍、学习笔记、性能测试
  6. 我的WPF控件库——KAN.WPF.XCtrl(141105)
  7. php去除数组中重复数据
  8. java程序练习:x进制转Y进制
  9. [NOIP2011普及组]瑞士轮 JAVA实现
  10. java 更改list 某一元素?
  11. 电子器件行业ERP实施案例
  12. 【java设计模式】【行为模式Behavioral Pattern】模板方法模式Template Method Pattern
  13. javaweb下载文件模板
  14. 利用Windows性能计数器(PerformanceCounter)监控
  15. php 获取用户的IP、地址、来源
  16. 【winform】splitContainer拆分器控件
  17. 基于DPDK的高效包处理系统
  18. 【转】Leveldb源码分析——1
  19. Android Studio修改项目中整体包名
  20. 404错误处理以及以后缀为action结尾的处理

热门文章

  1. IDEA+Maven 整合SSM框架实现简单的增删改查(新手入门,傻瓜操作)
  2. GoLand不同目录(包)方法调用
  3. 算法题-Z 字形变换
  4. python网络编程socketserver模块(实现TCP客户端/服务器)
  5. JavaScrip 之 DOM
  6. 解决“fatal: 'origin' does not appear to be a git repository...”
  7. BASH Shell 文件管理
  8. NGUI 源码分析- UIWidgetInspector
  9. MSP430系列单片机特性及应用领域
  10. Vue自定义指令使用场景