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了