当前位置:   article > 正文

java调用oracle的存储过程取出游标里的数据_存储过程取游标中的值

存储过程取游标中的值

java程序连接oracle数据库




连接

在我的服务器上有一个oracle实例是在运行的。

在这里插入图片描述
在plsql里可以查看到这个实例有个表叫fenye:
在这里插入图片描述

首先下载ojdbc.jar ,提取码:iehb

随便建立一个java项目:
在这里插入图片描述
添加JUnit4,把ojdbc包导进来:
在这里插入图片描述
创建一个Cono测试类用于测试:

public class Cono {

	@Test
	public void t1() {
		//注册驱动
		String driver = "oracle.jdbc.driver.OracleDriver";
		//连接路径 jdbc:oracle:thin:@ip:数据库运行端口:数据库名
		String url = "jdbc:oracle:thin:@111.231.228.126:1521:array";
		//用户名
		String username = "array";
		//用户密码
		String password = "916437";
		try {
			Class.forName(driver);
			Connection con = DriverManager.getConnection(url,username,password);
			Statement sta = con.createStatement();
			String sql="select * from fenye";
			ResultSet rs=sta.executeQuery(sql);
			while(rs.next()) {
				System.out.println(rs.getObject(1)+","+rs.getObject(2));
			}
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	

}

  • 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
  • 29

在这里插入图片描述




调用存储过程返回分页结果

在plsql里对数据库添加一个分页的存储过程:
/*startnum和endnum都是数值型传入参数,nn是游标型传出参数*/
create or replace procedure fenye_method(startnum number,endnum number,nn out sys_refcursor) 
is
begin
    open nn for 
     select id,name from
     (select rownum r,e.* from fenye e where rownum<=endnum order by id)
     where r>startnum;  
end;

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10

执行完然后刷新就在过程里看得到有个方法了:
在这里插入图片描述
然后在java测试类里写调用的方法:

	@Test
	public void t2() {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@111.231.228.126:1521:array";
		String username = "array";
		String password = "916437";
		try {
			Class.forName(driver);
			Connection con = DriverManager.getConnection(url,username,password);
			CallableStatement fenye_method = con.prepareCall("{call fenye_method(?,?,?)}");
			fenye_method.setInt(1, 0);
			fenye_method.setInt(2, 10);
			fenye_method.registerOutParameter(3, OracleTypes.CURSOR);
			fenye_method.execute();
			ResultSet rs=((OracleCallableStatement)fenye_method).getCursor(3);
			while(rs.next()) {
				System.err.println(rs.getObject(1)+","+rs.getObject(2));
			}
			System.out.println();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

在这里插入图片描述
这就是java程序调用oracle分页的方法了。
此外为了方便,我们还可以封装一个调用分页的方法:


	public void f(Integer start,Integer end) {
		String driver = "oracle.jdbc.driver.OracleDriver";
		String url = "jdbc:oracle:thin:@111.231.228.126:1521:array";
		String username = "array";
		String password = "916437";
		try {
			Class.forName(driver);
			Connection con = DriverManager.getConnection(url,username,password);
			CallableStatement fenye_method = con.prepareCall("{call fenye_method(?,?,?)}");
			fenye_method.setInt(1, start);
			fenye_method.setInt(2, end);
			fenye_method.registerOutParameter(3, OracleTypes.CURSOR);
			fenye_method.execute();
			ResultSet rs=((OracleCallableStatement)fenye_method).getCursor(3);
			while(rs.next()) {
				System.err.println(rs.getObject(1)+","+rs.getObject(2));
			}
			System.out.println();
		} catch (Exception e) {
			// TODO: handle exception
		}
	}
	
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24

执行测试类t3:

	@Test
	public void t3() {
		f(0,10);
		System.out.println("-------------");
		f(10,20);	
	}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

在这里插入图片描述
这些java方法都是没有返回值的,如果需要返回值,可以考虑新建一个pojo来接收从oracle数据库取出来的数据

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/笔触狂放9/article/detail/602047
推荐阅读
相关标签
  

闽ICP备14008679号