java实现调用ORACLE中的游标和包

Posted 要成为程序员的男人

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java实现调用ORACLE中的游标和包相关的知识,希望对你有一定的参考价值。

今天把oracle中的包和游标学习了下,不废话,网上的的有些代码是错误的,抄来抄去,就自己实践了下,做个记录。直接上图,上代码

通过plsql创建自己的的包,包分为包头和包体。

1.包头如下:

1 CREATE OR REPLACE PACKAGE JAVALINKTEST
2 IS
3   TYPE CURSOR_TYPE IS REF CURSOR;      --定义游标
4   PROCEDURE TEST_CURSOR(INPUT STRING, CURSOR_BACK OUT CURSOR_TYPE);
5 
6 END JAVALINKTEST;

 

2.包体如下:

 1 CREATE OR REPLACE PACKAGE BODY JAVALINKTEST IS
 2 
 3 PROCEDURE TEST_CURSOR(INPUT STRING, CURSOR_BACK OUT CURSOR_TYPE)
 4 IS
 5 BEGIN
 6 IF INPUT = \'物料\' THEN
 7 OPEN CURSOR_BACK FOR SELECT *  FROM T_BD_MATERIAL WHERE CFISSYNC = 1;
 8 ELSE
 9 OPEN CURSOR_BACK FOR SELECT *  FROM T_BD_CUSTOMER WHERE CFISSYNC = 1;
10 
11 END IF;
12 
13 END TEST_CURSOR;
14 END JAVALINKTEST;

 

3.java环境,用的时eclispe,oracle 11g,java代码如下,需要的小伙伴自己引一下jdbc包吧

 1 package cursorTest;
 2 
 3 import java.sql.CallableStatement;
 4 import java.sql.Connection;
 5 import java.sql.DriverManager;
 6 import java.sql.ResultSet;
 7 import java.sql.SQLException;
 8 import java.sql.Statement;
 9 import oracle.jdbc.OracleTypes;
10 import oracle.jdbc.oracore.OracleType;
11 
12 public class cursorUse {
13     static ResultSet rs = null;
14     static Statement stmt = null;
15     static Connection conn = null;
16     static CallableStatement proc = null;
17     static int i;  
18 
19     public static void main(String[] args) {
20 
21         try {
22             // 加载驱动
23             Class.forName("oracle.jdbc.driver.OracleDriver");
24             // 与数据库建立物理连接
25             conn = DriverManager.getConnection(
26                     "jdbc:oracle:thin:@127.0.0.1:1521:orcl", "easdb", "easdb");
27             // 调用 游标
28             proc = conn.prepareCall("call JAVALINKTEST.TEST_CURSOR(?,?)");
29             proc.setString(1, "hhe");
30             proc.registerOutParameter(2, OracleTypes.CURSOR);
31             proc.execute();
32             rs = (ResultSet) proc.getObject(2);
33             
34             while (rs.next()) {
35                 i+=1;
36                 System.out.println("fid:" + rs.getString(1)+
37                         "   编码:"+rs.getString("fnumber")+"  名称:"+rs.getString("fname_l2"));
38                 
39             }
40             System.out.println("返回结果集:共"+i+"行");
41         } catch (ClassNotFoundException e) {
42             // TODO Auto-generated catch block
43             e.printStackTrace();
44         } catch (SQLException e) {
45             // TODO Auto-generated catch block
46             e.printStackTrace();
47         } finally {
48             if (rs != null) {
49                 try {
50                     rs.close();
51                 } catch (SQLException e) {
52                     // TODO Auto-generated catch block
53                     e.printStackTrace();
54                 }
55             }
56             if (stmt != null) {
57                 try {
58                     stmt.close();
59                 } catch (SQLException e) {
60                     // TODO Auto-generated catch block
61                     e.printStackTrace();
62                 }
63             }
64             if (conn != null) {
65                 try {
66                     conn.close();
67                 } catch (SQLException e) {
68                     // TODO Auto-generated catch block
69                     e.printStackTrace();
70                 }
71             }
72         }
73 
74     }
75 
76 }

运行结果如下:

 

以上是关于java实现调用ORACLE中的游标和包的主要内容,如果未能解决你的问题,请参考以下文章

ibatis 怎么返回oracle游标

如何从存储过程中获取嵌套游标 - Java & Oracle

oracle 存储过程执行动态SQL 返回结果给游标,外部程序获得dataset结果集。

调用返回游标的 oracle 函数

Oracle如何创建存储过程和如何调用存储过程

如何实现Oracle数据库中的动态游标