Sybase·调用存储过程并返回结果

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

项目架构:SSM

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

存储过程名:query_xxx_record_detail

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

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
--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个

1
2
3
4
5
6
7
8
9
10
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);<br><br>//使用list得到返回值,是存储过程中的sql决定的。这个跟其他的select一样可以封装<br><br>List<MposRecord> queryResult = mapper.queryPospMposRecordDetail(queryMap);

 3、在mapper中方法:

 

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

 

 4、在xml文件中:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<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语句很像

 

posted @   undifinedException  阅读(1049)  评论(0编辑  收藏  举报
编辑推荐:
· 智能桌面机器人:用.NET IoT库控制舵机并多方法播放表情
· Linux glibc自带哈希表的用例及性能测试
· 深入理解 Mybatis 分库分表执行原理
· 如何打造一个高并发系统?
· .NET Core GC压缩(compact_phase)底层原理浅谈
阅读排行:
· 手把手教你在本地部署DeepSeek R1,搭建web-ui ,建议收藏!
· 新年开篇:在本地部署DeepSeek大模型实现联网增强的AI应用
· 程序员常用高效实用工具推荐,办公效率提升利器!
· Janus Pro:DeepSeek 开源革新,多模态 AI 的未来
· 【译】WinForms:分析一下(我用 Visual Basic 写的)
点击右上角即可分享
微信分享提示