`
king520
  • 浏览: 174664 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
文章分类
社区版块
存档分类
最新评论

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的子接口。

分享到:
评论

相关推荐

    SQL注入与防止SQL注入

    然而,随着技术的发展,攻击者找到了无需引号就能构造有效SQL语句的方法,使得攻击变得更加容易。 PHP与MySQL结合的环境中,SQL注入的误区在于人们通常认为必须使用单引号来构造SQL语句。实际上,无论在哪种编程...

    JDBC中Statement和Preparement的使用讲解

    例如,在登录页面中,如果使用 Statement 来执行 SQL 语句,可能会出现 SQL 注入的问题: ```java String sql = "select * from users " + "where username = ' " + username + " ' and password= ' " + passwd + ...

    防止SQL语句注入

    3. SonarQube:代码质量管理工具,可检测潜在的安全问题和代码质量缺陷。 通过综合运用这些技术和工具,可以显著降低SQL注入的风险,保护您的Web应用程序和数据库免受攻击。对于开发者来说,理解和实施这些防御策略...

    Web编程技术补考模拟试卷B卷.doc

    7. JavaScript连接js文件的方法中,src属性应指向js文件,如`&lt;script language="javascript" src="a.js"&gt;&lt;/script&gt;`。 8. `&lt;body&gt;`是双标签,而不是单标签。 9. 用户点击提交后,客户端通过浏览器(如IE)访问服务器...

    2023年Web编程技术补考模拟试卷B卷.doc

    JDBC接口中没有`Preparement`,应为`PreparedStatement`。 7. **JSP执行过程**:JSP先被翻译成Java源码,然后编译为字节码,最后执行生成网页,对应顺序是翻译-》编译-》执行。 8. **JSP表达式**:`...

Global site tag (gtag.js) - Google Analytics