JAVA中使用参数含有游标的存储过程
来源:互联网 发布:钢管舞教学视频软件 编辑:程序博客网 时间:2024/06/08 08:49
JAVA中使用参数含有游标的存储过程
关于存储过程: 存储过程是一组为了完成特定功能的SQL语句集, 经编译后存储在数据库中,用户通过指定存储过程的名字(给出参数)来执行它
游标:游标(CURSOR)是系统为用户开设的一个数据缓冲区,存放SQL语句的执行结果
首先创建一个含有游标参数的存储过程
包头部分:
create or replace package mypackage is
type empcursor is ref cursor;
procedure queryEmpList(dno in number,empList out empcursor);
end mypackage;
包体部分:
create or replace package body mypackage is
procedure queryEmpList(dno in number,empList out empcursor)
as
begin
open empList for select * from emp where deptno=dno;
end;
end mypackage;
1. JDBC调用存储过程(参数含有游标的)
书写DBUtils工具类,例如:
package demotest;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;public class DBUtils { private static String driver = "oracle.jdbc.OracleDriver"; private static String url = "jdbc:oracle:thin:@localhost:1521:orcl"; private static String user = "ksxx_26"; private static String password = "ksxx_26"; static{ try { Class.forName(driver); } catch (ClassNotFoundException e) { throw new ExceptionInInitializerError(e); } } public static Connection getConn(){ try { return DriverManager.getConnection(url, user, password); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } public static void close(Connection conn, Statement st, ResultSet rs){ if(conn != null){ try { conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(st != null){ try { st.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } if(rs != null){ try { rs.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } public static void main(String[] args) { System.out.println(DBUtils.getConn()); }}
书写Junit单元测试工具类,例如:
package demotest;import java.sql.CallableStatement;import java.sql.Connection;import java.sql.ResultSet;import oracle.jdbc.internal.OracleCallableStatement;import oracle.jdbc.internal.OracleTypes;import oracle.jdbc.oracore.OracleType;import org.junit.Test;public class TestProcedure { @Test public void test(){ String sql = "{call mypackage.QUERYEMPLIST(?,?)}"; Connection conn = null; CallableStatement call = null; ResultSet rs = null; try{ conn = DBUtils.getConn(); call = conn.prepareCall(sql); call.setInt(1, 10); call.registerOutParameter(2, OracleTypes.CURSOR); call.execute(); rs = ((OracleCallableStatement)call).getCursor(2); while(rs.next()){ String name = rs.getString("ename"); double sal = rs.getDouble("sal"); System.out.println(name+"\t"+sal); } }catch (Exception e) { e.printStackTrace(); } }}
2.在MyBatis中调用存储过程(参数含有游标的)
DAO中代码:
public interface EmpDao { List<Emp> findbyDeptno(Map map);}
EmpMapper.xml文件代码
<mapper namespace="org.ks.dao.EmpDao"> <resultMap type ="org.ks.entity.Emp" id= "cursorMap"> <result column ="empno" property="empno" /> <result column ="ename" property="ename" /> <result column ="job" property="job" /> <result column ="mgr" property="mgr" /> <result column ="hiredate" property="hiredate" /> <result column ="sal" property="sal" /> <result column ="comm" property="comm" /> <result column ="deptno" property="deptno" /> </resultMap > <select id ="findbyDeptno" statementType="CALLABLE" parameterType="java.util.Map" > {call mypackage.QUERYEMPLIST( #{deptno, jdbcType=VARCHAR, mode=IN}, #{empList, mode=OUT, jdbcType=CURSOR,resultMap=cursorMap})} </select > </mapper>
Junit单元测试部分:
package org.ks.test;import java.util.ArrayList;import java.util.HashMap;import java.util.LinkedList;import java.util.List;import java.util.Map;import org.junit.Test;import org.ks.dao.EmpDao;import org.ks.entity.Emp;import org.springframework.context.ApplicationContext;import org.springframework.context.support.ClassPathXmlApplicationContext;public class TestEmpProcedure { @Test public void test(){ ApplicationContext ac = new ClassPathXmlApplicationContext("applicationContext.xml"); EmpDao dao = ac.getBean("empDao", EmpDao.class); List<Emp> empList = new ArrayList<Emp>();//声明一个集合用来接收查询后返回的游标结果 Map<String, Object> paramMap = new HashMap<String, Object>(); paramMap.put("deptno", 20); paramMap.put("empList", empList); dao.findbyDeptno(paramMap); empList = (List<Emp>)paramMap.get("empList"); for(Emp emp : empList){ System.out.println(emp); } }}
阅读全文
0 0
- JAVA中使用参数含有游标的存储过程
- java 调用Oracle存储过程(输入参数,输出参数,游标)的使用!
- 在java的hibernate3框架中调用oracle数据库中带游标参数的存储过程
- <Oracle游标>存储过程中使用游标
- 存储过程中使用游标
- 存储过程中使用游标
- oracle 参数游标和存储过程的结合使用
- 创建ORCLE存储过程含有一个输出游标参数和输出整型参数(实现对表的分页效果)
- 存储过程中游标带参数
- 存储过程返回OUT参数的游标
- 编写存储过程返回的结果集在游标中使用java代码调用
- 存储过程中 游标(CURSOR)的简单使用及其他
- 存储过程中 游标(CURSOR)的简单使用及其他
- SQL 存储过程中使用游标的样例
- SQL Server学习:存储过程中Cursor(游标)的使用
- MYSQL存储过程中使用游标的实例
- oracle 中游标和存储过程的使用
- oracle中存储 过程嵌套游标的使用
- 考试总结16
- 机器学习入门(一)
- Python函数记录
- CVX介绍——求解器
- 1120. Friend Numbers (20)(朋友数)
- JAVA中使用参数含有游标的存储过程
- web前端笔记
- PAT甲级 1036. Boys vs Girls (25)
- Person
- css 的表格的添加删除
- Maven多模块项目介绍和搭建
- 【hdu2929】【高精度+动规】CQYZ_Vijos_P2102 越大越好
- 埃拉托斯特尼筛法算法复杂度(n*lnlnn)的证明([欧拉数学]素数倒数之和)
- 四位计算机的原理及其实现