`
zjxs_sky100
  • 浏览: 30265 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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.<init>(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,真是太不小心了。

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

相关推荐

Global site tag (gtag.js) - Google Analytics