Unable to retrieve metadata for procedure

第一次用jdbc调用mysql存储过程的过程中犯了一个严重的错误:(对本人来说)
代码如下:

PreparedStatement call = con.prepareCall("{proc_card_vouc(?,?,?,?)}");

启动应用程序时,控制台报出:
java.sql.SQLException: Unable to retrieve metadata for procedure.
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:910)
at com.mysql.jdbc.CallableStatement.extractProcedureName(CallableStatement.java:868)
at com.mysql.jdbc.CallableStatement.determineParameterTypes(CallableStatement.java:699)
at com.mysql.jdbc.CallableStatement.(CallableStatement.java:513)
at com.mysql.jdbc.Connection.parseCallableStatement(Connection.java:4583)
at com.mysql.jdbc.Connection.prepareCall(Connection.java:4657)
at com.mysql.jdbc.Connection.prepareCall(Connection.java:4631)
at com.sunyard.dao.AccountDAOImpl.account(AccountDAOImpl.java:34)
at com.sunyard.dao.AccountDAOImpl.main(AccountDAOImpl.java:87)

当时一下在懵了,去网上百度下,始终没发现问题。后来实在无奈,是查看了com.mysql.jdbc.CallableStatement.extractProcedureName这个方法,发现里面一段代码:int endCallIndex = StringUtils.indexOfIgnoreCase(sanitizedSql,"CALL "); 原来自己传入的参数少一个 call,真是太不小心了。

结论:查看源代码有时候还是很有作用的 ,以后要好好养成习惯

你可能感兴趣的:(学习)