mybatis3调用oracle存储过程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/dreamfromthere/article/details/84499749

 

 今天用到了mybatis3 调用oracle的存储过程,这存储过程仅负责查询数据和返回查询结果

 

oracle的存储过程,如果要查询数据必须有一个游标供使用 

先看下简单的存储过程 

 

CREATE OR REPLACE PROCEDURE zdrqlx_PROC
    (
           V_TEMP OUT zdrqlxPackage.zdrqlx_cursor
   )
   AS
   BEGIN
           OPEN V_TEMP FOR SELECT LXMC FROM TBGW_ZHDRQFL ;
END zdrqlx_PROC;

 

 

这个存储过程查询后 结果是 一列数据 列名 LXMC 

 

下面贴查询mybatis的配置

 

 

<resultMap id="teshurenqunMap" type="bean.admin.menus.ZhongDianRenQunBean" >
<result column="lxmc" property="lxmc" />
</resultMap>

<select id="selectByMap"  parameterType="map"   statementType="CALLABLE" >
	{ call zdrqlx_PROC(#{listinfo,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=teshurenqunMap})}
</select>

 

 

程序调用的是selectByMap 这个方法 在调用的时候 需要传入一个参数 这里参数名是map ,map内可以什么属性都没有, 在mybatis调用存储过程后,会把数据 回塞给这个map

所以 如果你的程序是   Map resultmap = dao.selectByMap(map); 

然后去读取resultmap ,结果会是null的 什么都没有,而数据实际上在被存在参数的map里面 而不是resultmap  (map 是参数map,resultmap 是返回接收的) 这点很重要,我被卡住了半天!!!

 

下面是调用  看了上面一段话 下面的程序一目了然

 

 

 

 Map map = new HashMap();
			 menusService.getToolsBarMunus(map);//这里调用selectByMap
			 map.put("success", true);
//这边数据会存在这个参数map里,是被回填的了
			datas.append(com.alibaba.fastjson.JSON.toJSONString(map));

 

 

com.alibaba.fastjson.JSON.toJSONString(map)  

这句话是用的json组件转化map得到string,结果是下面的

 

{"listinfo":[{"lxmc":"张三"},{"lxmc":"李四"},{"lxmc":"王五"}{"lxmc":"赵六"}]}

根据结果,反过来看调用存储过程

{ call zdrqlx_PROC(#{listinfo,mode=OUT,jdbcType=CURSOR,javaType=java.sql.ResultSet,resultMap=teshurenqunMap})}

 

1. listinfo 这个是第一个参数,我是随意写的,不和任何东西管理,看下上面json转化后的map结果就明白了

2  mode=OUT 声明此参数作为输出类型

3  jdbcType=CURSOR 说明他是游标 因为这个存储过程主要是查询,需要传入一个游标参数,不信的话你在plsql里面test存储过程 看下面就明白了

javaType=java.sql.ResultSet, 貌似固定要求这样,求大神解答

 5 resultMap 必须有这个参数 我这里配置的 是resultMap id="teshurenqunMap" 对应的

 

 

最后是我的bean 也就是resultMap 设置的type=

 

package bean.admin.menus;

import java.util.List;

public class ZhongDianRenQunBean {
	private String lxmc;
	public String getLxmc() {
		return lxmc;
	}

	public void setLxmc(String lxmc) {
		this.lxmc = lxmc;
	}

}

 

 

 

讲的很乱 希望能对碰到类似问题的同学有所帮助。。。

 

 

 

 

 

 

 

 

 

 

 

 

展开阅读全文

调用ORACLE存储过程

08-01

我在ASP页面上写调用ORACLE的存储过程,出现如下错误:rnADODB.Command 错误 '800a0bb9' rn参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。请打家看看什么原因。或者有另外的方法也可以。rn<%rnSet cmdTemp=Server.CreateObject("ADODB.Command") rnSet cmdTemp.ActiveConnection=Conn1 rncmdTemp.CommandType=4 rncmdTemp.CommandText="SEARCH_MODEL"rnsn01="M520073"rnrn set tmp1Param=cmdTemp.CreateParameter("SN01",adVarChar2,adParamInput,30,sn01) rn cmdTemp.Parameters.Append tmp1Param rn rn set tmp2Param=cmdTemp.CreateParameter("SN02",adVarChar2,adParamOutput,8)rn cmdTemp.Parameters.Append tmp2Paramrn set tmp3Param=cmdTemp.CreateParameter("SN03",adVarChar2,adParamOutput,8)rn cmdTemp.Parameters.Append tmp3Paramrn set tmp4Param=cmdTemp.CreateParameter("SN04",adVarChar2,adParamOutput,8)rn cmdTemp.Parameters.Append tmp4Paramrn set tmp5Param=cmdTemp.CreateParameter("SN05",adVarChar2,adParamOutput,8)rn cmdTemp.Parameters.Append tmp5Paramrn set tmp6Param=cmdTemp.CreateParameter("SN06",adVarChar2,adParamOutput,8)rn cmdTemp.Parameters.Append tmp6Paramrn set tmp7Param=cmdTemp.CreateParameter("SN07",adVarChar2,adParamOutput,8)rn cmdTemp.Parameters.Append tmp7Paramrn set tmp8Param=cmdTemp.CreateParameter("SN08",adVarChar2,adParamOutput,8)rn cmdTemp.Parameters.Append tmp8Paramrn set tmp9Param=cmdTemp.CreateParameter("SN09",adChar,adParamOutput,8)rn cmdTemp.Parameters.Append tmp9Paramrn set tmp10Param=cmdTemp.CreateParameter("SN10",adChar,adParamOutput,8)rn cmdTemp.Parameters.Append tmp10Paramrn cmdTemp.Executern%>rn+++++++++++++++++++++++++++++++>>PROC:rnCREATE OR REPLACE procedure search_modelrn (p_sn in sn_file.sn01%type,rn p_sn01 out sn_file.sn01%type,rn p_sn02 out sn_file.sn02%type,rn p_sn03 out sn_file.sn03%type,rn p_sn04 out sn_file.sn04%type,rn p_sn05 out sn_file.sn05%type,rn p_sn06 out sn_file.sn06%type,rn p_sn07 out sn_file.sn07%type,rn p_sn08 out sn_file.sn08%type,rn p_sn09 out char,rn p_sn10 out char )rnisrnp_sn_record sn_file%rowtype;rnbeginrn select * into p_sn_record from sn_filern where sn01 = p_sn;rn if SQL%FOUND thenrn p_sn01 := p_sn_record.sn01;rn p_sn02 := p_sn_record.sn02;rn p_sn03 := p_sn_record.sn03;rn p_sn04 := p_sn_record.sn04;rn p_sn05 := p_sn_record.sn05;rn p_sn06 := p_sn_record.sn06;rn p_sn07 := p_sn_record.sn07;rn p_sn08 := p_sn_record.sn08;rn p_sn09 := to_char(p_sn_record.sn09,'YYYY/MM/DD');rn p_sn09 := to_char(p_sn_record.sn10,'YYYY/MM/DD');rn declarern p_model model_file%rowtype;rn beginrn select * into p_model from model_filern where model = p_sn_record.sn08;rn if SQL%FOUND thenrn p_sn06 := p_model.showtext;rn end if;rn exceptionrn when others thenrn p_model.showtext := ' ';rn end;rn end if;rnexceptionrn when others thenrn p_sn_record.sn01 := ' ';rnend; 论坛

Delphi调用Oracle存储过程插入图片

06-05

procedure TFrm_Main.UpLoad_Data(_FileName: string);rnvarrn _Temp:string;rn _id:string;rn _stream,_stream1,_stream2:TMemoryStream;rnbeginrn tryrn _Temp:=cxListBox1.items[cxListBox1.itemindex];rn exceptrn Application.MessageBox('请先选择图片,才能进行浏览!','提示',64);rn Exit;rn end;rn ReadINIFile(cxButtonEdit1.Text,_FileName);rn _Temp:= ExtractFilePath(_FileName);rn Application.CreateForm(TFrm_LookPic,Frm_LookPic);rn _FILE1:=_Temp + _FILE1;rn _FILE2:= _Temp + _FILE2;rn _FILE3:= _Temp + _FILE3;rn _FILE4:= _Temp + _FILE4;rn _stream:= TMemoryStream.Create;rn _stream1:= TMemoryStream.Create;rn _stream2:= TMemoryStream.Create;rn _stream.LoadFromFile(_FILE1);rn _stream.Position:= 0 ;rn _stream1.LoadFromFile(_FILE2);rn _stream1.Position:= 0 ;rn _stream2.LoadFromFile(_FILE3);rn _stream2.Position:= 0 ;rn OraStoredProc1.Close;rn OraStoredProc1.StoredProcName:= 'pro_mep_1';rn OraStoredProc1.Params.CreateParam(ftString,'strHPZL',ptInput).AsString:= ''; //可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strHPHM',ptInput).AsString:= HPHM; //可以为空rn OraStoredProc1.Params.CreateParam(ftDateTime,'strWFSJ',ptInput).AsDateTime:= Now; //不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strWFXW',ptInput).AsString:= '11'; //不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strWFDD',ptInput).AsString:= '1'; //不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strWFDZ',ptInput).AsString:= ''; //可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strCJJG',ptInput).AsString:= '1'; //不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strSJLY',ptInput).AsString:= '1'; //不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strZPLX',ptInput).AsString:= '1'; //不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strSBBH',ptInput).AsString:= '1'; //不可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strDLGLS',ptInput).AsInteger:= 0; //不可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strDLMS',ptInput).AsInteger:= 0; //不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'strFJBJ',ptInput).AsString:= ''; //可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strCLSD',ptInput).AsInteger:= StrToInt(WFCS); //可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strDCXS',ptInput).AsInteger:= StrToInt(WFXS); //可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strXCXS',ptInput).AsInteger:= 0; //可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strDCZFXS',ptInput).AsInteger:= 0; //可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strXCZFXS',ptInput).AsInteger:= 0; //可以为空rn OraStoredProc1.Params.CreateParam(ftInteger,'strZDXS',ptInput).AsInteger:= 0; //可以为空rn OraStoredProc1.Params.CreateParam(ftOraBlob,'strPhoto1',ptInput).LoadFromStream(_stream,ftOraBlob);rn OraStoredProc1.Params.CreateParam(ftOraBlob,'strPhoto2',ptInput).LoadFromStream(_stream1,ftOraBlob);//不可以为空rn OraStoredProc1.Params.CreateParam(ftOraBlob,'strPhoto3',ptInput).LoadFromStream(_stream2,ftOraBlob);//不可以为空rn OraStoredProc1.Params.CreateParam(ftString,'out_ZXJG',ptOutput);rn OraStoredProc1.ExecProc;rn _id:= OraStoredProc1.Params.ParamByName('out_ZXJG').Value;rn ShowMessage(_id);rnend;rnrnrn 执行时出现指定的LOB定位器无效。谁知道,高分送上。rn rnrn 论坛

■■■jsp调用oracle存储过程问题??■■■

07-30

我的代码如下:rn<%@ page contentType="text/html;charset=gb2312"%> rn<%@ page import="java.sql.*"%> rn rn rn<%Class.forName("oracle.jdbc.driver.OracleDriver").newInstance(); rnString url="jdbc:oracle:thin:@192.168.0.16:1521:xxxx"; rn//orcl为你的数据库的SID rnString user="xxxx"; rnString password="xxxx"; rnConnection conn= DriverManager.getConnection(url,user,password); rnStatement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE); rnCallableStatement proc = conn.prepareCall(" ?=call pkgxCommon.prcListDealForms() ");rnproc.registerOutParameter(1, Types.OTHER);rnproc.execute();rnResultSet rs = (ResultSet) proc.getObject(1);rnproc.close();rnconn.close();rn%> rn rn rnrnrnrn出现以下的错误,请帮忙解决!!!谢谢!!!!rnjavax.servlet.ServletException: ??????rn org.apache.jasper.runtime.PageContextImpl.doHandlePageException(PageContextImpl.java:867)rn org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:800)rn org.apache.jsp.tdb_jsp._jspService(tdb_jsp.java:68)rn org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)rn javax.servlet.http.HttpServlet.service(HttpServlet.java:856)rn org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)rn org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)rn org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)rn javax.servlet.http.HttpServlet.service(HttpServlet.java:856)rn 论坛

没有更多推荐了,返回首页