Preparement方法问题

Oracle开发中进行数据插入的操作,代码是可以完全执行的,到了Mysql方法下 ,却报插入失败的操作。具体报错信息如下:

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:857)

        at com.mysql.jdbc.CallableStatement.determineParameterTypes(CallableStatement.java:692)

        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 com.caucho.sql.UserConnection.prepareCall(UserConnection.java:427)

        at com.whir.cms.prjs.chaoHuGov.lwzzMessage.LWMessageServiceImpl.addRecordMessage(LWMessageServiceImpl.java:90)

        at _jsp._lwzt._index__jsp._jspService(_index__jsp.java:1048)

        at com.caucho.jsp.JavaPage.service(JavaPage.java:61)

        at com.caucho.jsp.Page.pageservice(Page.java:578)

        at com.caucho.server.dispatch.PageFilterChain.doFilter(PageFilterChain.java:195)

        at com.caucho.server.cache.CacheFilterChain.doFilter(CacheFilterChain.java:148)

        at com.caucho.server.webapp.WebAppFilterChain.doFilter(WebAppFilterChain.java:187)

        at com.caucho.server.dispatch.ServletInvocation.service(ServletInvocation.java:265)

        at com.caucho.server.http.HttpRequest.handleRequest(HttpRequest.java:273)

        at com.caucho.server.port.TcpConnection.run(TcpConnection.java:682)

        at com.caucho.util.ThreadPool$Item.runTasks(ThreadPool.java:743)

        at com.caucho.util.ThreadPool$Item.run(ThreadPool.java:662)

        at java.lang.Thread.run(Thread.java:595)

 

不能够为存储过程找到元数据!的错误信息。

 

开始以为调用

PreparementStatement的时候 参数设置的有问题。后来经过试验才发现是因为PreparementStatement方法调用的时候发生了错误。

 

具体方法如下:

  

开始调用的Connection接口的方法:

   PreparedStatement pstmt = this.connection.prepareCall(sql.toString());

改正后调用接口的方法:

   PreparedStatement pstmt = this.connection.prepareStatement(sql.toString());

 

 

总结1

prepareCall:创建一个 CallableStatement 对象来调用数据库存储过程

prepareStatement :创建一个 PreparedStatement 对象来将参数化的 SQL 语句发送到数据库

 

总结2

pstmt.setString()

可以设置所有类型的参数。不至于类型转换的时候报错。

总结3

想了下  Mysql是不带Procedure的,不支持存储过程,所以用CallableStatement就会报错了。但是OracleCallableStatement调用没有报错。

而且注意一点:CallableStatementPrepareStatement的子接口。

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值