• Java调用oracle存储过程通过游标返回临时表数据


    注:本文来源于 《  Java调用oracle存储过程通过游标返回临时表数据   》

    Java调用oracle存储过程通过游标返回临时表数据

      项目开发过程中,不可避免的会用到存储过程返回结果集。特别是选择Oracle做为数据库时,就更麻烦了,因为Oracle存储过程和SQLServer的有点不太一样,直接返回不了结果集,那么怎么才能在使用Oracle的情况下返回结果集,程序代码中怎么获取到那,请看下面几篇:

           1.存储过程返回结果集

           2.Java中执行存储过程以及多结果集处理

           3.返回临时表中数据

      1 package com.zjhcsoft.test.utl;
      2 
      3 import java.sql.CallableStatement;
      4 import java.sql.Connection;
      5 import java.sql.DriverManager;
      6 import java.sql.ResultSet;
      7 
      8 import oracle.jdbc.OracleCallableStatement;
      9 import oracle.jdbc.driver.OracleTypes;
     10 
     11 public class TestOracleProc3 {
     12 
     13 	/**
     14 	 * @param args
     15 	 */
     16 	public static void main(String[] args) {
     17 		try {
     18 			Class.forName("oracle.jdbc.driver.OracleDriver");
     19 		} catch (Exception e) {
     20 			e.printStackTrace();
     21 		}
     22 
     23 		Connection conn = null;
     24 		String DBurl = "jdbc:oracle:thin:@134.98.8.168:1521:ora817";
     25 		try {
     26 			conn = DriverManager.getConnection(DBurl, "sfz2", "sfz2_123");
     27 			System.out.println("Getting Connection...");
     28 			conn.close();
     29 		} catch (Exception e) {
     30 			e.printStackTrace();
     31 		}
     32 
     33 		try {
     34 			conn = DriverManager.getConnection(DBurl, "sfz2", "sfz2_123");
     35 			long start = System.currentTimeMillis();
     36 			//最关键一步
     37 			conn.setAutoCommit(false);
     38 			OracleCallableStatement cstmt = (OracleCallableStatement)conn.prepareCall("{call sfz_obj.proc_sfz_proc_test(?,?)}");
     39 			cstmt.setString(1, "");
     40 			cstmt.registerOutParameter(2,OracleTypes.CURSOR);
     41 			cstmt.execute();
     42 			long end = System.currentTimeMillis();
     43 			System.out.println("this procedure consumes "+((end-start)/1000)+" excute time.");
     44 			start = System.currentTimeMillis();
     45 			int i=0;
     46 			ResultSet rs = (ResultSet)cstmt.getObject(2);
     47 			   while (rs.next()) {
     48 				   System.out.println("column"+(i+1)+":"+rs.getString(1)+",  "+rs.getString(2)+",  "+rs.getString(3));
     49 				   i++;
     50 			   }
     51 			   System.out.println("this procedure has "+(i-1)+" data.");
     52 			end = System.currentTimeMillis();
     53 			System.out.println("show this procedure data consumes "+((end-start)/1000)+" excute time.");
     54 			conn.commit();
     55 			cstmt.close();
     56 			conn.close();
     57 		} catch (Exception e) {
     58 			e.printStackTrace();
     59 		}
     60 	}
     61 
     62 }
     63 

    ————————————————————————————————————————————————————————————————————————————————————————————

  • 相关阅读:
    centos7-根据端口号查看所属应用
    centos7-网络与防火墙常用命令
    docker(5)常用命令
    docker(4)使用Dockerfile文件创建镜像-对docker(3)的改进
    [多校联考2021] 模拟赛4
    [省选前集训2021] 模拟赛7
    [多校联考2021] 模拟赛3
    [学习笔记] 圆方树
    [多校联考2021] 模拟赛2
    [学习笔记] 反悔贪心
  • 原文地址:https://www.cnblogs.com/ios9/p/8880052.html
Copyright © 2020-2023  润新知