在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,重新编译并执行,问题解决,发现是原来驱动程序的问题。真是有点难以理解