mysql的jdbc驱动程序bug

来源:互联网 发布:淘宝直播平台管理规范 编辑:程序博客网 时间:2024/05/17 01:19

在windows2003机器上,服务器端版本为5.1.14-beta-community-nt-log MySQL Community Server (GPL),原先用的驱动程序版本为 mysql-connector-java-5.0.5-bin.jar,java代码为:

            conn = DriverManager.getConnection(url, user, password);
            stmt = conn.prepareCall("{call p_transfer_money(?,?,?,?)}");
            stmt.registerOutParameter(4, Types.INTEGER);
            stmt.setInt(1, acct1);
            stmt.setInt(2, acct2);
            stmt.setDouble(3, amount);
            stmt.execute();
            int succ = stmt.getInt(4);

结果总是报错:
java.lang.NumberFormatException: For input string: " 2"
 at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
 at java.lang.Integer.parseInt(Integer.java:468)
 at java.lang.Integer.<init>(Integer.java:609)
 at com.mysql.jdbc.DatabaseMetaData$TypeDescriptor.<init>(DatabaseMetaData.java:261)
 at com.mysql.jdbc.DatabaseMetaData.getCallStmtParameterTypes(DatabaseMetaData.java:1784)
 at com.mysql.jdbc.DatabaseMetaData.getProcedureColumns(DatabaseMetaData.java:3983)
 at com.mysql.jdbc.CallableStatement.determineParameterTypes(CallableStatement.java:702)
 at com.mysql.jdbc.CallableStatement.<init>(CallableStatement.java:513)
 at com.mysql.jdbc.Connection.parseCallableStatement(Connection.java:4520)
 at com.mysql.jdbc.Connection.prepareCall(Connection.java:4594)
 at com.mysql.jdbc.Connection.prepareCall(Connection.java:4568)
 at cn.itcast.jdbc.Account.transferMoney2(Account.java:152)
 at cn.itcast.jdbc.Account.main(Account.java:21)
Exception in thread "main"

查看代码和sql的写法(j2se 1.4.2的文档):
   {?= call <procedure-name>[<arg1>,<arg2>, ...]}
   {call <procedure-name>[<arg1>,<arg2>, ...]}

实在是百思不得其解,没有办法,到www.mysql.com网站上重新下载了一个驱动程序mysql-connector-java-5.1.0-bin.jar,重新编译并执行,问题解决,发现是原来驱动程序的问题。真是有点难以理解