ssm 框架中用 mybatis mapper 注解注解方式调用存储过程,存储过程有中 有个INOUT属性,在java调用中会报错

Mybatis中运用小技巧(三)存储过程的运用 - death05的博客
- _韦德1946娱乐(唯一)官方网站|
存储过程sqlmybatis
数据库(7)
存储过程的创建
假设存在一张表:Follow(关注表),其表结构如下:
其中id需要是自增。
假设我们需要实现的存储过程是能根据userId1和userId2的值选择出一条记录。
博主使用的是Navicat,因此创建存储过程的步骤为:
1、点击“函数”:
2、点击“新建函数”:
3、选择“过程”,点击“下一步”:
4、新建两个参数,代表传进去的两个参数userId1和userId2的值,分别取名为a和b,点击完成:
5、将a、b两个 变量重命名为@userId1和@userId2,这是博主的习惯,大家也可以直接利用a、b,然后写上语句即可:
6、保存,命名为“proc_FollowByUserId1AndUserId2Select”,此处的命名规则可以参考我之前的写的。
项目中Mapper层的声明
&span style=&white-space:pre&& &/span&/**
* 查找两人之间是否存在关注关系
* @param id
* @param id2
Follow selectByUserId1AndUserId2(Integer id, Integer id2);
FollowMapper.xml中的写法
&resultMap id=&BaseResultMap& type=&cn.cslg.microblog.PO.Follow& &
&id column=&id& property=&id& jdbcType=&INTEGER& /&
&result column=&userId1& property=&userid1& jdbcType=&INTEGER& /&
&result column=&userId2& property=&userid2& jdbcType=&INTEGER& /&
&/resultMap&
&select id=&selectByUserId1AndUserId2& resultMap=&BaseResultMap&&
{call proc_FollowByUserId1AndUserId2Select(
#{0, jdbcType=INTEGER, mode=IN}, #{1, jdbcType=INTEGER, mode=IN})}
这样就是最简单的在Mybatis中调用存储过程的用例,这已经能解决一些简单的开发中涉及的存储过程的使用,希望大家能通过此能开始了解存储过程的使用,至于更深层次的应用,博主同样也是初学者,会在以后尽可能多的呈现。
参考知识库
* 以上用户言论只代表其个人,不代表CSDN网站的或立场
访问:22125次
排名:千里之外
原创:24篇
(1)(3)(4)(4)(1)(3)(5)(7)(2)(3)求MyBatis调用存储过程的问题 -Java- TryCatch
>> Content
求MyBatis调用存储过程的问题
我现在的项目是Strust2+Spring+&MyBatis3.0,因为项目中有个需求需要调用存储过程,我在MyBatis的配置文件里这样写了&!--&调用存储过程计算请假时长&--&&&&&&&&&&&&parameterMap&type="map"&id="LeaveApplyDetailMap"&&&&&parameter&property="strEmployeeNo"&jdbcType="VARCHAR"&javaType="java.lang.String"&mode="IN"/&&&&&parameter&property="beginDate"&jdbcType="DATE"&javaType="java.util.Date"&mode="IN"/&&&&&parameter&property="endDate"&jdbcType="DATE"&javaType="java.util.Date"&mode="IN"/&&&&&parameter&property="typeNo"&jdbcType="VARCHAR"&javaType="java.lang.String"&mode="IN"/&&&&&parameter&property="resultCode"&jdbcType="VARCHAR"&javaType="java.lang.String"&mode="OUT"/&&&&&parameter&property="resultData"&jdbcType="VARCHAR"&javaType="java.lang.String"&mode="OUT"/&&/parameterMap&&&&&&&&&&!--&检查请假日期是否有效&--&&&&&&select&id="LeaveCheck"&&parameterMap="LeaveApplyDetailMap"&&&&&CALL&PKG_ATT.SP_Get_LeaveCheck(#{strEmployeeNo},#{beginDate},#{endDate},#{typeNo},#{resultCode},#{resultData})&&&&&/select&这时在程序里调用时是这样写的:Map&map&=&new&HashMap&String,&Object&();&&&&map.put("strEmployeeNo",detail.getStrEmployeeNo());&&&&map.put("beginDate",&detail.getBeginDate());&&&&map.put("endDate",&detail.getEndDate());&&&&map.put("typeNo",&detail.getStrTypeNo());&&&&map.put("resultCode",&"0");&&&&map.put("resultData",&"0");dao.get("LeaveCheck",&map);程序调用时就报错的,DEBUG&-&==&&&Executing:&CALL&PKG_ATT.SP_Get_LeaveCheck(?,?,?,?,?,?)&DEBUG&-&==&&Parameters:&(String),&&09:21:00.0(Timestamp),&&20:21:00.0(Timestamp),&1005(String),&0(String),&0(String)INFO&-&Loading&XML&bean&definitions&from&class&path&resource&[org/springframework/jdbc/support/sql-error-codes.xml]INFO&-&SQLErrorCodes&loaded:&[DB2,&Derby,&H2,&HSQL,&Informix,&MS-SQL,&MySQL,&Oracle,&PostgreSQL,&Sybase]DEBUG&-&xxx&Connection&ClosedINFO&-&[c3p0]&Exceptions&occurred&while&trying&to&close&a&PooledConnection's&resources&normally.ERROR&-&mapperKeyId:【LeaveCheck】执行失败&;错误原因:org.springframework.jdbc.UncategorizedSQLException:&###&Error&querying&database.&&Cause:&java.sql.SQLException:&无法从套接字读取更多的数据###&The&error&may&involve&cn.machi.oa.atte.dao.impl.LeaveApplyDAOImpl.LeaveApplyDetailMap###&The&error&occurred&while&setting&parameters###&Cause:&java.sql.SQLException:&无法从套接字读取更多的数据;&uncategorized&SQLException&for&SQL&[];&SQL&state&[null];&error&code&[17410];&无法从套接字读取更多的数据;&nested&exception&is&java.sql.SQLException:&无法从套接字读取更多的数据org.springframework.jdbc.UncategorizedSQLException:&###&Error&querying&database.&&Cause:&java.sql.SQLException:&无法从套接字读取更多的数据###&The&error&may&involve&cn.machi.oa.atte.dao.impl.LeaveApplyDAOImpl.LeaveApplyDetailMap###&The&error&occurred&while&setting&parameters###&Cause:&java.sql.SQLException:&无法从套接字读取更多的数据;&uncategorized&SQLException&for&SQL&[];&SQL&state&[null];&error&code&[17410];&无法从套接字读取更多的数据;&nested&exception&is&java.sql.SQLException:&无法从套接字读取更多的数据at&org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:83)at&org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)at&org.springframework.jdbc.support.AbstractFallbackSQLExceptionTranslator.translate(AbstractFallbackSQLExceptionTranslator.java:80)at&org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:65)at&org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:345)at&$Proxy0.selectOne(Unknown&Source)at&org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:158)at&cn.machi.framework.dao.impl.BaseDAOImpl.get(BaseDAOImpl.java:66)at&cn.machi.framework.dao.impl.BaseDAOImpl$$FastClassByCGLIB$$fd01e960.invoke(&generated&)at&net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)at&org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)at&org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)at&cn.machi.oa.atte.dao.impl.LeaveApplyDAOImpl$$EnhancerByCGLIB$$5c7d549c.get(&generated&)at&cn.machi.oa.atte.service.puteTotalHour(LeaveApplyServiceImpl.java:313)在网上找了很多类似的问题,都没能解决,不知何故,这里说明一下,数据库是Oracle,连接池是c3p0当调用没有返回值的存储过程时是正常的,有返回参数的都报这样的错。不知是我的写法不对还是jar包的问题。求解!
------Solutions------
不懂友情帮顶...
------Solutions------
楼主用的是什么数据库的驱动包据说是需要更换oracle的驱动包
------Solutions------
这个是你的SQL有问题存储过程写的不正确你把这些参数&Parameters:&(String),&&09:21:00.0(Timestamp),&&20:21:00.0(Timestamp),&1005(String),&0(String),&0(String)替换到存储过程中&用SQL直接调用看是否报错
------Solutions------
谢谢,我在pl/sql里测试过了,这个存储过程没报错,而且测试数据都正确数据库驱动包用的是ojdbc14.jar不知这个包有什么问题
------Solutions------
我刚把本地按装的orcale客户端里的classes12.jarojdbc14_g.jar都换到工程lib目录下试了下,还是报同样的错
------Solutions------
Oracle服务器上的jdbc/lib目录下的包和我本地的是一样的,有:classes12.jarclasses12dms.jarojdbc14.jarojdbc14_g.jarojdbc14dms.jarojdbc14dms_g.jar
------Solutions------
你这个resultData是什么类型的?会不会是string接收不到这么大的数据类型?
------Solutions------
&select&id="LeaveCheck"&&parameterMap="LeaveApplyDetailMap"&&&&&&&&&CALL&PKG_ATT.SP_Get_LeaveCheck(#{strEmployeeNo},#{beginDate},#{endDate},#{typeNo},#{resultCode},#{resultData})&&&&&/select&换成&procedure&id="LeaveCheck"&&parameterMap="LeaveApplyDetailMap"&&&&&&&&&{CALL&PKG_ATT.SP_Get_LeaveCheck(?,?,?,?,?,?)}&/procedure&试试
------Solutions------
ibatis调用存储过程&一般数据量大的话&是先执行存储过程将数据插入到临时表里然后通过查询临时表&将数据显示并不是你想的&&直接些个调用存储过程的配置&正好将数据返回出来存储过程的配置只能返回游标
------Solutions------
我用JDBC的方式写就可以成功调用public&void&textXX()&&&&{&&&&Connection&conn&=&//getSqlSession().getConnection();&&&&&&&&&&&&&&&&&&&&try&&&&&&&&{&&&&&&&&Class.forName("oracle.jdbc.driver.OracleDriver");&&&&&&&&conn=DriverManager.getConnection("jdbc:oracle:thin:@10.134.11.237:1521:OA",&"test",&"test");&&&&&&&&&&&&CallableStatement&cs&=&conn.prepareCall("{CALL&PKG_ATT.SP_Get_LeaveCheck(?,?,?,?,?,?)}");&&&&&&&&&&&&cs.setString(1,&"");&&&&&&&&&&&&cs.setDate(2,&new&Date(new&java.util.Date().getTime()));&&&&&&&&&&&&cs.setDate(3,&new&Date(new&java.util.Date().getTime()+6000));&&&&&&&&&&&&cs.setString(4,&"1005");&&&&&&&&&&&&cs.registerOutParameter(5,&Types.VARCHAR);&&&&&&&&&&&&cs.registerOutParameter(6,&Types.VARCHAR);&&&&&&&&&&&&cs.execute();&&&&&&&&&&&&String&str&=&cs.getString(5);&&&&&&&&&&&&System.out.println("result:&"+str);&&&&&&&&}&&&&&&&&catch&(SQLException&e)&&&&&&&&{&&&&&&&&&&&&//&TODO&Auto-generated&catch&block&&&&&&&&&&&&e.printStackTrace();&&&&&&&&}&catch&(ClassNotFoundException&e)&{//&TODO&Auto-generated&catch&blocke.printStackTrace();}finally&&&&&&&&{&&&&&&&&&&&&if(null&!=&conn)&&&&&&&&&&&&{&&&&&&&&&&&&&&&&try&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&conn.close();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&&&&&catch&(SQLException&e)&&&&&&&&&&&&&&&&{&&&&&&&&&&&&&&&&&&&&//&TODO&Auto-generated&catch&block&&&&&&&&&&&&&&&&&&&&e.printStackTrace();&&&&&&&&&&&&&&&&}&&&&&&&&&&&&}&&&&&&&&}&&&&}System.out.println("result:&"+str);打印出来的信息是:result:&-1:该公司假别编号为1005的假别基本资料未维护!如果我用c3p0的Connection的话,就会报错。代码是这样写的:只改了上面的一句:Connection&conn&=&getSqlSession().getConnection();说conn是关闭的,WARN&-&java.version&''1.6.0_10-rc2''&could&not&be&parsed.&Defaulting&to&JDK&1.1.ERROR&-&Error&calling&Connection.prepareCall:java.sql.SQLException:&You&can't&operate&on&a&closed&Connection!!![Cause:&java.lang.NullPointerExceptionat&com.mchange.v2.c3p0.impl.NewProxyConnection.prepareCall(NewProxyConnection.java:527)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.apache.ibatis.logging.jdbc.ConnectionLogger.invoke(ConnectionLogger.java:39)at&$Proxy7.prepareCall(Unknown&Source)at&cn.machi.framework.dao.impl.BaseDAOImpl.textXX(BaseDAOImpl.java:86)at&cn.machi.framework.dao.impl.BaseDAOImpl$$FastClassByCGLIB$$fd01e960.invoke(&generated&)at&net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)at&org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)at&org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)at&cn.machi.oa.atte.dao.impl.LeaveApplyDAOImpl$$EnhancerByCGLIB$$d19ada1f.textXX(&generated&)at&cn.machi.oa.atte.service.puteTotalHour(LeaveApplyServiceImpl.java:303)
------Solutions------
好像报的还是环境问题,更换跟换包吧。再试试。
------Solutions------
在Mybatis的maper文件的配置中有这样的一个属性:statementType="CALLABLE"我看到网上给出的例子都有这个属性,&&select&id="LeaveCheck"&&parameterMap="LeaveApplyDetailMap"&&statementType="CALLABLE"&&&&&&&&&CALL&PKG_ATT.SP_Get_LeaveCheck(#{strEmployeeNo},#{beginDate},#{endDate},#{typeNo},#{resultCode},#{resultData})&&&&&/select&可是一套在我这里用的话,就会报另一个错ERROR&-&mapperKeyId:【LeaveCheck】执行失败&;错误原因:org.mybatis.spring.MyBatisSystemException:&nested&exception&is&org.apache.ibatis.exceptions.PersistenceException:&###&Error&querying&database.&&Cause:&java.lang.ClassCastException:&org.apache.ibatis.executor.statement.CallableStatementHandler&cannot&be&cast&to&org.apache.ibatis.executor.statement.PreparedStatementHandler###&The&error&may&exist&in&file&[F:\Workspaces\workspace\oamanage\bin\cn\machi\oa\atte\resources\LeaveApply_Mapper.xml]###&The&error&may&involve&cn.machi.oa.atte.dao.impl.LeaveApplyDAOImpl.LeaveCheck###&The&error&occurred&while&executing&a&query###&Cause:&java.lang.ClassCastException:&org.apache.ibatis.executor.statement.CallableStatementHandler&cannot&be&cast&to&org.apache.ibatis.executor.statement.PreparedStatementHandlerorg.mybatis.spring.MyBatisSystemException:&nested&exception&is&org.apache.ibatis.exceptions.PersistenceException:&###&Error&querying&database.&&Cause:&java.lang.ClassCastException:&org.apache.ibatis.executor.statement.CallableStatementHandler&cannot&be&cast&to&org.apache.ibatis.executor.statement.PreparedStatementHandler###&The&error&may&exist&in&file&[F:\Workspaces\workspace\oamanage\bin\cn\machi\oa\atte\resources\LeaveApply_Mapper.xml]###&The&error&may&involve&cn.machi.oa.atte.dao.impl.LeaveApplyDAOImpl.LeaveCheck###&The&error&occurred&while&executing&a&query###&Cause:&java.lang.ClassCastException:&org.apache.ibatis.executor.statement.CallableStatementHandler&cannot&be&cast&to&org.apache.ibatis.executor.statement.PreparedStatementHandlerat&org.mybatis.spring.MyBatisExceptionTranslator.translateExceptionIfPossible(MyBatisExceptionTranslator.java:67)at&org.mybatis.spring.SqlSessionTemplate$SqlSessionInterceptor.invoke(SqlSessionTemplate.java:345)at&$Proxy5.selectOne(Unknown&Source)at&org.mybatis.spring.SqlSessionTemplate.selectOne(SqlSessionTemplate.java:158)at&cn.machi.framework.dao.impl.BaseDAOImpl.get(BaseDAOImpl.java:72)at&cn.machi.framework.dao.impl.BaseDAOImpl$$FastClassByCGLIB$$fd01e960.invoke(&generated&)at&net.sf.cglib.proxy.MethodProxy.invoke(MethodProxy.java:149)at&org.springframework.aop.framework.Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoint(Cglib2AopProxy.java:688)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:150)at&org.springframework.aop.aspectj.AspectJAfterAdvice.invoke(AspectJAfterAdvice.java:42)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.aspectj.AspectJAfterThrowingAdvice.invoke(AspectJAfterThrowingAdvice.java:55)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)at&org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)at&org.springframework.aop.framework.Cglib2AopProxy$DynamicAdvisedInterceptor.intercept(Cglib2AopProxy.java:621)at&cn.machi.oa.atte.dao.impl.LeaveApplyDAOImpl$$EnhancerByCGLIB$$8fff6ab5.get(&generated&)at&cn.machi.oa.atte.service.puteTotalHour(LeaveApplyServiceImpl.java:312)
------Solutions------
同问,我项目是mybatis3.03+spring,我在mapper文件这样配置:java代码:&&&&&&&&&&&&&&&&&&&Map&map&=&new&HashMap();map.put("x",&1);map.put("y",&2);map.put("z",&0);this.getSqlSession().selectOne("selectByProc",&map);mapper文件配置:&&&&&select&id="selectByProc"&parameterType="map"&&&{call&pp(#{x},#{y},#{z,mode=OUT,jdbcType=INTEGER})}&&&&&&&/select&&&运行报错:索引中丢失&&IN&或&OUT&参数::&3如果mapper文件修改成:&&&&&&select&id="selectByProc"&parameterType="map"&statementType="CALLABLE"&&&{call&pp(#{x},#{y},#{z,mode=OUT,jdbcType=INTEGER})}&&&&&&&/select&&&运行报错:org.apache.ibatis.executor.statement.CallableStatementHandler&cannot&be&cast&to&org.apache.ibatis.executor.statement.PreparedStatementHandler
------Solutions------
问题解决了,楼楼主可以结贴了,你是否也有自定义的分页工具插件?有的就修改下StatementHandler&handler&=&(StatementHandler)&ReflectUtil.getFieldValue(statement,&"delegate");//&增加CallableStatementHandler判断,如果是存储过程,则不执行下面的过程if&(handler&instanceof&PreparedStatementHandler){&&&&&&&&&&&&&&&&&&.......&&&&&&&&&&&&&&&&}增加一个判断,就不会强行转化成preparedstatement了,呵呵
------Solutions------
我靠,楼上厉害,这都被你找出来~~
------Solutions------
想看看是怎么解决的
------Solutions------
郁闷,同样的问题38849人阅读
mybatis(1)
存储过程:
use&base_passport
create&proc&yhj_test
&&&&@input_a&int,
&&&&@input_b&int,
&&&&@output_c&int&out
&&&&select&*&from&config.city;
&&&&set&@output_c&=&@input_a*@input_b;
&&&&return&@input_a+@input_b;
Mybats配置:
&&&&&resultMap&type=&java.util.HashMap&&id=&resultMap&&
&&&&&&&&result&column=&city_key&&property=&cityKey&javaType=&java.lang.Integer&&jdbcType=&INTEGER&/&
&&&&&&&&result&column=&province_key&&property=&provinceKey&javaType=&java.lang.Integer&&jdbcType=&INTEGER&/&
&&&&&&&&result&column=&city_name&&property=&cityName&javaType=&java.lang.String&&jdbcType=&VARCHAR&/&
&&&&&/resultMap&
&&&&&select&id=&testByProc&&statementType=&CALLABLE&parameterType=&java.util.HashMap&&resultMap=&resultMap&&
&&&&&&&&![CDATA[
&&&&&&&&&&&{#{d,mode=OUT,jdbcType=INTEGER}=call dbo.yhj_test(
&&&&&&&&&&&&&&#{a,mode=IN,jdbcType=INTEGER},
&&&&&&&&&&&&&&#{b,mode=IN,jdbcType=INTEGER},
&&&&&&&&&&&&&&#{c,mode=OUT,jdbcType=INTEGER}
&&&&&&&&&&&)}&&&&
&&&&&&&]]&
&&&&&/select&
Map&String, Object& paramMap =&new&HashMap&String,
Object&();
&&&&&&&paramMap.put(&a&,
&&&&&&&paramMap.put(&b&,
&&&&&&&List&City& citys = (List&City&) getTemplate().selectList(getNameSpaceAndMethod(&testByProc&),
paramMap);
&&&&&&&return&citys;
通过以上代码我们即可获取对应的结果集,return参数和output参数。其中return参数和output参数放在传入的paramMap中,运行结果如下:
c是存储过程的output参数,而d为return参数。
需要注意的事项:
1、存储过程的参数和名称无关,只和顺序有关系
2、存储过程的output参数,只能通过传入的map获取
3、存储过程返回的结果集可直接用返回的map接收
4、存储过程的return结果需要使用?=call
procName(?,?)的第一个参数接收,需要指定对应的mode为OUT类型
5、存储过程对应的数据类型为枚举类型,需要使用大写,如VARCHAR
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:1889911次
积分:18052
积分:18052
排名:第442名
原创:249篇
转载:215篇
评论:322条
阅读:53405
(5)(2)(1)(1)(2)(3)(6)(4)(1)(1)(2)(12)(2)(15)(33)(35)(9)(12)(17)(3)(5)(2)(11)(42)(6)(21)(24)(14)(1)(1)(6)(14)(24)(3)(6)(13)(3)(6)(5)(12)(19)(22)(24)(14)

我要回帖

更多关于 mysql 存储过程 inout 的文章

 

随机推荐