环境:tomcat6.0,struts2.3.15,spring,ibatis2.3,
调用存储过程时,显示:(网上查了,得不到解决)
只要是调用存储过程,就这样显示。member.xml:
<parameterMap class="java.util.Map" id="memberBaseInfoData">
   <parameter property="unit_type" javaType="java.lang.Short" jdbcType="tinyint"mode="IN"/>
   <parameter property="cluster_id" javaType="java.lang.Integer" jdbcType="int" mode="IN" />
   <parameter property="login_id" javaType="java.lang.String" jdbcType="varchar" mode="IN"/>
   <parameter property="name" javaType="java.lang.String" jdbcType="varchar" mode="IN"/>
   <parameter property="passwd" javaType="java.lang.String" jdbcType="varchar" mode="IN"/>
   <parameter property="sex" javaType="java.lang.Short" jdbcType="tinyint" mode="IN"/>
   <parameter property="born_date" javaType="java.lang.String" jdbcType="date" mode="IN"/>
<parameter property="credentials_type" javaType="java.lang.String" jdbcType="varchar"mode="IN"/>
<parameter property="credentials_id" javaType="java.lang.String" jdbcType="varchar" mode="IN"/>
<parameter property="user_type" javaType="java.lang.Short" jdbcType="tinyint" mode="IN"/>
<parameter property="cell_phone" javaType="java.lang.String" jdbcType="varchar" mode="IN"/>
<parameter property="email" javaType="java.lang.String" jdbcType="varchar" mode="IN"/>
<parameter property="unit_id" javaType="java.lang.Integer" jdbcType="varchar" mode="OUT"/>
</parameterMap>

<procedure id="registerUser" parameterMap="memberBaseInfoData">
{call REGISTER_USER(?,?,?,?,?,?,?,?,?,?,?,?,?)} 
</procedure>dao层:
public void callProcedure(String sql, Object map) {
     this.getSqlMapClientTemplate().queryForObject(sql, map);
}
单元测试时的错误信息:java.sql.SQLException: Callable statments not supported.
at com.mysql.jdbc.Connection.prepareCall(Connection.java:1268)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:239)
at $Proxy14.prepareCall(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.ibatis.common.jdbc.logging.ConnectionLogProxy.invoke(ConnectionLogProxy.java:60)
at $Proxy15.prepareCall(Unknown Source)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.prepareCall(SqlExecutor.java:508)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQueryProcedure(SqlExecutor.java:264)
at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteQuery(ProcedureStatement.java:39)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:189)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at org.springframework.orm.ibatis.SqlMapClientTemplate$1.doInSqlMapClient(SqlMapClientTemplate.java:270)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:200)
at org.springframework.orm.ibatis.SqlMapClientTemplate.queryForObject(SqlMapClientTemplate.java:268)
at com.hlw.nine.potato.foundation.dao.SqlMapDao.callProcedure(SqlMapDao.java:98)
at com.hlw.nine.potato.foundation.service.BaseService.callProcedure(BaseService.java:145)
at com.hlw.nine.potato.service.impl.PotatoServiceImpl.bindDevice(PotatoServiceImpl.java:274)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:183)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)
at org.springframework.transaction.interceptor.TransactionInterceptor.invoke(TransactionInterceptor.java:110)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)
at $Proxy13.bindDevice(Unknown Source)
at com.hlw.nine.potato.ws.iface.MemberDeviceServiceImpl.bindDevice(MemberDeviceServiceImpl.java:89)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(InstanceResolver.java:246)
at com.sun.xml.ws.server.InvokerTube$2.invoke(InvokerTube.java:146)
at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(EndpointMethodHandler.java:257)
at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(SEIInvokerTube.java:93)
at com.sun.xml.ws.api.pipe.Fiber.__doRun(Fiber.java:595)
at com.sun.xml.ws.api.pipe.Fiber._doRun(Fiber.java:554)
at com.sun.xml.ws.api.pipe.Fiber.doRun(Fiber.java:539)
at com.sun.xml.ws.api.pipe.Fiber.runSync(Fiber.java:436)
at com.sun.xml.ws.server.WSEndpointImpl$2.process(WSEndpointImpl.java:243)
at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(HttpAdapter.java:444)
at com.sun.xml.ws.transport.http.HttpAdapter.handle(HttpAdapter.java:244)
at com.sun.xml.ws.transport.http.server.WSHttpHandler.handleExchange(WSHttpHandler.java:106)
at com.sun.xml.ws.transport.http.server.WSHttpHandler.handle(WSHttpHandler.java:91)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
at sun.net.httpserver.AuthFilter.doFilter(AuthFilter.java:65)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:68)
at sun.net.httpserver.ServerImpl$Exchange$LinkHandler.handle(ServerImpl.java:555)
at com.sun.net.httpserver.Filter$Chain.doFilter(Filter.java:65)
at sun.net.httpserver.ServerImpl$Exchange.run(ServerImpl.java:527)
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
Caused by: com.ibatis.common.jdbc.exception.NestedSQLException:   
--- The error occurred in com/hlw/nine/potato/entity/OLY_MEMBER_sqlMap.xml.  
--- The error occurred while executing query procedure.  
--- Check the {call REGISTER_USER(?,?,?,?,?,?,?,?,?,?,?,?,?)}.  
--- Check the SQL Statement (preparation failed).  
--- Cause: java.sql.SQLException: Callable statments not supported.
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryWithCallback(MappedStatement.java:201)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.executeQueryForObject(MappedStatement.java:120)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:518)
at com.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate.queryForObject(SqlMapExecutorDelegate.java:493)
at com.ibatis.sqlmap.engine.impl.SqlMapSessionImpl.queryForObject(SqlMapSessionImpl.java:106)
at org.springframework.orm.ibatis.SqlMapClientTemplate$1.doInSqlMapClient(SqlMapClientTemplate.java:270)
at org.springframework.orm.ibatis.SqlMapClientTemplate.execute(SqlMapClientTemplate.java:200)
... 42 more
Caused by: java.sql.SQLException: Callable statments not supported.
at com.mysql.jdbc.Connection.prepareCall(Connection.java:1268)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.jdbc.datasource.TransactionAwareDataSourceProxy$TransactionAwareInvocationHandler.invoke(TransactionAwareDataSourceProxy.java:239)
at $Proxy14.prepareCall(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.ibatis.common.jdbc.logging.ConnectionLogProxy.invoke(ConnectionLogProxy.java:60)
at $Proxy15.prepareCall(Unknown Source)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.prepareCall(SqlExecutor.java:508)
at com.ibatis.sqlmap.engine.execution.SqlExecutor.executeQueryProcedure(SqlExecutor.java:264)
at com.ibatis.sqlmap.engine.mapping.statement.ProcedureStatement.sqlExecuteQuery(ProcedureStatement.java:39)
at com.ibatis.sqlmap.engine.mapping.statement.MappedStatement.execu
teQueryWithCallback(MappedStatement.java:189)存储ibatisstruts2springtomcat

解决方案 »

  1.   

    好像是jdbc的驱动包问题,换一个试试
      

  2.   

    你debug 看下参数是否都有值 还有数据类型 和数据库是否都应。
      

  3.   

    u010684923:好像是jdbc的驱动包问题,换一个试试
    好象是的,主要是我的项目里lib下有个较低版本的jar包在,尽管项目没有引入还是加载到tomcat下了,犯了低级错误
      

  4.   

    这个检查过很多次了,而且用简单的jdbc测试过是成功的,还是谢谢啦!