`
xubindehao
  • 浏览: 243922 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

mysql驱动取别名

阅读更多

我在用apache beanutils包对resultSet进行dyanbean转换时发现别名无法识别
数据库mysql 5.1 驱动版本 mysql-connector-java-5.1.7
跟踪代码时发现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();
因此无法正常拿到别名
table player
id
name

table user
id
player_id
name

执行sql代码如下:
select a.id, a.name ,b.name as bname from player a, user b where a.id = b.player_id 

在mysql中执行为

id name bname
1 xx cc
2 aa bb

在java中运行,resultSet通过index获取没有问题,但是在resultSet.getMetaData的时候,通过metaData获取columnName时用Index获取字段名时就发现获取的字段为
id,name,name,完全获取的是originalName而不是想获取的别名
在hashMap中存取名称的时候就只剩下2个字段名id,name。

有哪位兄弟知道改怎么配置,是在mysql server 中配置还是在java端配置connect的属性?

分享到:
评论
2 楼 xubindehao 2012-08-13  
hong-cn 写道
虽然过去2年多了,但是看到你这篇文章给我了些启发。
现在把解决办法献上:
jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true

主要是添加这个配置:&useOldAliasMetadataBehavior=true

感谢啊!!这个问题我一直没有解决 呵呵,当时没有想到可以通过这个配置可以改变jdbc驱动启动的context,
1 楼 hong-cn 2012-07-26  
虽然过去2年多了,但是看到你这篇文章给我了些启发。
现在把解决办法献上:
jdbc:mysql://localhost:3306/mydb?useUnicode=true&characterEncoding=utf-8&useOldAliasMetadataBehavior=true

主要是添加这个配置:&useOldAliasMetadataBehavior=true

相关推荐

    mysql jdbc驱动包

    1. Type 1:纯Java驱动,也称为别名驱动。它依赖于ODBC桥,通过ODBC来与数据库通信,适合小型项目,但性能较低。 2. Type 2:混合型驱动,一部分是Java代码,另一部分是本地库(如C代码)。这种驱动比Type 1快,但...

    MySql驱动

    MySQL驱动是用于连接MySQL数据库的一种中间件,它允许应用程序通过ODBC(Open Database Connectivity)标准与MySQL服务器进行通信。ODBC是一种数据访问接口,由微软公司开发,它为不同的数据库系统提供了一个统一的...

    jdbc-mysql-connector-j-8.0.31.jar jdbc-sqljdbc41.jar

    这个驱动在JMeter中扮演的角色与MySQL驱动类似,都是为了支持JMeter对SQL Server数据库的接口自动化测试。 将`jdbc-sqljdbc41.jar`添加到JMeter的`lib`目录后,用户可以通过配置JDBC Connection Configuration元素...

    websphere8.5 mysql数据源配置

    如果遇到这样的问题,尝试使用与WebSphere 8.5兼容的MySQL JDBC驱动程序版本。 5. 在完成数据源的基本设置后,需要点击“保存”来确保所做的配置被记录。 6. 接下来,需要点击刚才新建的MySQL JDBC提供者来进行...

    数据库驱动包(ms-sqlserver,sqlServer,oracle,mysql)

    MySQL驱动主要服务于MySQL数据库,这是一个开源、免费的关系型数据库管理系统。MySQL提供了多种语言的驱动,包括PHP、Python、Java(JDBC)、C++、Perl等。Java中的MySQL Connector/J是常用的JDBC驱动,它允许Java...

    最新老男孩Mysql标杆班day05.rar

    1.2020-开年标杆班-day05-MySQL上节回顾 10.2020-开年标杆班-day... 7.2020-开年标杆班-day05-MySQL-select 别名应用 8.2020-开年标杆班-day05-MySQL-select补充内容 9.2020-开年标杆班-day05-MySQL-show语句介绍

    在websphere7.0中配置mysql数据源

    接着,指定包含MySQL JDBC驱动的jar包路径,然后完成设置。 **三、配置数据源** 1. 在新建的JDBC提供程序上,选择“数据源”>“新建”。 2. 提供数据库连接信息,如数据源名和JNDI(Java Naming and Directory ...

    MySQL 5.1中文手冊

    9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集...

    delphi7.0连接MYSQL

    在本文中,我们将探讨如何使用Delphi 7.0连接到MySQL 5.0数据库,主要涉及使用ODBC(Open Database Connectivity)驱动程序和ADO(ActiveX Data Objects)技术。Delphi 7是一款历史悠久但仍然被广泛使用的集成开发...

    MySQL 5.1参考手册

    9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集...

    mysql5.1中文手册

    数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集...

    MySQL 5.1参考手册 (中文版)

    9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集...

    Mysql-connector-odbc-3.51.27-win32

    3. **MySQL Connector/ODBC 配置**:安装完成后,需要在 ODBC 数据源管理员中创建一个新的系统 DSN 或用户 DSN,选择 MySQL Connector/ODBC 作为驱动程序,并输入相应的 MySQL 服务器信息。 4. **MATLAB 与 MySQL ...

    MySQL 5.1参考手册中文版

    9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规...

    MySQL 5.1官方简体中文参考手册

    9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集...

    MYSQL中文手册

    9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. ...

    mybatis-3.4.6需要的jar包+mysql-connector-java-5.1.35.jar

    而"mysql-connector-java-5.1.35.jar"是MySQL官方提供的JDBC驱动,用于连接Java应用程序和MySQL数据库。 1. **MyBatis框架**:MyBatis提供了一种动态的SQL和映射机制,允许开发者在XML或注解中编写SQL,将SQL语句与...

    MySQL5.1参考手册官方简体中文版

    9.2. 数据库、表、索引、列和别名 9.2.1. 识别符限制条件 9.2.2. 识别符大小写敏感性 9.3. 用户变量 9.4. 系统变量 9.4.1. 结构式系统变量 9.5. 注释语法 9.6. MySQL中保留字的处理 10. 字符集支持 10.1. 常规字符集...

    java 连接 oracle、sql2005、mysql使用的jar

    2. **mysql.jar** - 这个文件可能是旧版MySQL JDBC驱动的别名,通常应该是`mysql-connector-java.jar`。它是连接MySQL数据库所需的JDBC驱动,允许Java应用与MySQL服务器交互。在新的MySQL版本中,推荐使用的是`mysql...

    servlet+mysql的jndi配置

    4. **复制JDBC驱动到lib目录**:将MySQL的JDBC驱动文件(通常是`mysql-connector-java-x.x.xx.jar`)复制到`tomcat/lib`目录下,这样Tomcat服务器就能识别并加载该驱动。 #### 二、配置Servlet 接下来需要配置一个...

Global site tag (gtag.js) - Google Analytics