Dec 23 2008

substring返回类型在mysql驱动 3.x 和 5.x中的区别

Category: 技术ssmax @ 17:16:52

tnnd,有人竟然用jdbcType来决定mysql查询返回的对象类型。。。但是mysql驱动也在3.x -> 5.x 这个升级过程中改变了一点,造成jdbcType来判断就有问题了。。。

ResultSet rs = stmt.executeQuery(“select substring(now(),12,2) as gtime;”);
ResultSetMetaData rsmd = rs.getMetaData();
for(int i=1; i<=rsmd.getColumnCount(); i++) {
System.out.print(rsmd.getColumnName(i));
System.out.print(“::”);
System.out.print(rsmd.getColumnType(i));
System.out.print(“::”);
System.out.print(rsmd.getColumnTypeName(i));
System.out.print(“::”);
System.out.println();
}

这样子,在3.x的驱动里面,会认为:
gtime::12::VARCHAR

但是在 5.x的驱动里面,就会认为这个是:
gtime::-3::VARBINARY

jdbcType判断有有问题了,很无奈啊。。。虽然有办法,但是要改代码,
select cast(substring(now(),12,2) as CHAR(2)) as gtime

这样子就可以了,但是效率肯定有点影响,懒得改了,只有升级到mysql 3.1的最新版算了,不用5.x了

Leave a Reply

*
To prove you're a person (not a spam script), type the security text shown in the picture. Click here to regenerate some new text.
Click to hear an audio file of the anti-spam word