zoukankan      html  css  js  c++  java
  • Sybase·调用存储过程并返回结果

    最近项目要用Sybase数据库实现分页,第一次使用Sybase数据库,也是第一次使用他的存储过程。2个多小时才调用成功,在此记录:

    项目架构:SSM

    1、Sybase本身不支持分页操作,需要写存储过程来调用,这是很坑的。存储过程的内容暂且放下,

    存储过程名:query_xxx_record_detail

    输入输出参数如下:9个输入,5个输出

    --input
    @terminal_no      varchar(16),   
    @account_no       varchar(16),    
    @begin_time       char(14),     
    @end_time         char(14),     
    @query_type       varchar(1),   ---0:query all   1:paging 
    @count_per_page   Integer = 10,    
    @start_page_num   Integer = 1,    
    @page_count       Integer = 1,    
    @timestamp        char(19),      
    --output
    @total_pages      integer      output,	
    @total_records    varchar(8)   output,	  
    @total_amount     varchar(14)  output,	
    @return_code      char(4)      output,	
    @error_msg        varchar(255) output 	
    as 
    

    2、在业务层整理参数:

    注意:在使用map携带参数时,只需要传入input参数。。9个

    Map<String,Object> queryMap = new HashMap<String, Object>();
    //调用存储过程:
    queryMap.put("terminal_no",terminalNo);
    queryMap.put("account_no", accountNo);
    queryMap.put("begin_time", beginTime);
    queryMap.put("end_time", endTime);
    queryMap.put("query_type", type);
    queryMap.put("count_per_page", pageRecordCountNo);
    queryMap.put("start_page_num", beginPageNo);
    queryMap.put("page_count",pageCountNo);

    //使用list得到返回值,是存储过程中的sql决定的。这个跟其他的select一样可以封装

    List<MposRecord> queryResult = mapper.queryPospMposRecordDetail(queryMap);

     3、在mapper中方法:

            /**
      	 * 调用存储过程返回分页结果
    	 * @param queryMap
    	 * @return
    	 */
    	List<MposRecord> queryPospMposRecordDetail(Map<String, Object> queryMap);
      
    

     4、在xml文件中:

    <select id="queryPospMposRecordDetail" statementType="CALLABLE" parameterMap="queryDetailMap" resultType="java.util.Map">
    	 <![CDATA[{call query_xxx_record_detail (?,?,?,?,?,?,?,?,?, ?,?,?,?)}]]>	
    	</select>
    
    	<parameterMap type="java.util.Map" id="queryDetailMap">
    		<parameter property="terminal_no"  mode="IN" jdbcType="VARCHAR"/>  
    		<parameter property="account_no"  mode="IN" jdbcType="VARCHAR"/>  
    		<parameter property="begin_time"  mode="IN" jdbcType="CHAR"/>  
    		<parameter property="end_time"  mode="IN" jdbcType="CHAR"/>  
    		<parameter property="query_type"  mode="IN" jdbcType="VARCHAR"/>  
    		<parameter property="count_per_page"  mode="IN" jdbcType="INTEGER"/>  
    		<parameter property="start_page_num"  mode="IN" jdbcType="INTEGER"/>  
    		<parameter property="page_count"  mode="IN" jdbcType="INTEGER"/>  
    		
            	<parameter property="total_pages" mode="OUT"  jdbcType="INTEGER"/> 
           		<parameter property="total_records" mode="OUT"  jdbcType="VARCHAR"/> 
            	<parameter property="total_amount" mode="OUT"  jdbcType="VARCHAR"/> 
            	<parameter property="return_code" mode="OUT"  jdbcType="CHAR"/> 
            	<parameter property="error_msg" mode="OUT"  jdbcType="VARCHAR"/> 
    	</parameterMap>
    	
    	
    	<parameter property="total_pages" mode="OUT"  jdbcType="INTEGER"/> 
           		<parameter property="total_records" mode="OUT"  jdbcType="VARCHAR"/> 
            	<parameter property="total_amount" mode="OUT"  jdbcType="VARCHAR"/> 
            	<parameter property="return_code" mode="OUT"  jdbcType="CHAR"/> 
            	<parameter property="error_msg" mode="OUT"  jdbcType="VARCHAR"/> 
    	</parameterMap>
    

    注意:

    1.statementType="CALLABLE"

    2.占位符:9个传入参数,5个返回参数都需要占位符

    3.参数列表:传入参数和返回参数:用mode属性分开。

    总结:调用存储过程基本没啥区别,包括返回值跟其他select语句也基本一致,可以返回用来封装的bean或者list,可以返回string或者map。这是在写xml文件的时候要注意有些不一样的。

    主要还是最后的xml文件写法,跟一般的数据库sql语句很像

    凡你能说的,你说清楚。凡你不能说的,留给沉默!
  • 相关阅读:
    Jmeter(十五)正则表达式提取参数
    jmeter学习笔记(十三)debug调试工具
    jmeter学习笔记(十二)函数
    港澳台手机号正则表达式,区号+手机
    Mac 模拟弱网测试
    Mac下安装fiddler
    Appium基础总结1:获取包名和Activity
    selenium常用资源的阿里镜像链接(转)
    JMETER数据库MYSQL--初入门
    JMETER接口测试-小试牛刀(二)
  • 原文地址:https://www.cnblogs.com/dhcao/p/10428563.html
Copyright © 2011-2022 走看看