mysql 别名问题

warwolf99 2009-03-23 06:54:13
我在用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的属性?





...全文
409 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
kamuikyo 2009-11-23
  • 打赏
  • 举报
回复
试试 getColumnLabel
参看 http://blog.csdn.net/shuchengzhang/archive/2008/12/27/3621364.aspx
warwolf99 2009-03-24
  • 打赏
  • 举报
回复
我查了,这个是驱动mysql官方的jdbc,mysql5.1版本的server我也在unix和win下安装过,没有看到有什么可以影响jdbc在取别名时的参数
本身一度怀疑是jdbc有问题,但是发现jdbc中是有orginial的选项参数,只是没有找到设置的地方。起码在datasource中没有,而且mysql 的jdbc 的connectionImpl是封装的,标准的jdbc接口中并没有提到别名实现的特性。因此这个实现是mysql自己完成的,这样的话,就是在jdbc访问数据库时由数据库返回的stream中加入的这些识别字段,包括驱动的版本信息什么的。

不知道在mysql 的my.ini中是否有什么设置可以影响默认metadata取数据的参数
javaee_ssh 2009-03-24
  • 打赏
  • 举报
回复
帮顶
heavenfeng 2009-03-23
  • 打赏
  • 举报
回复
也许换驱动,也许,
我碰见过驱动版本不同而导致取结果为空,

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧