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中的游标和包的主要内容,如果未能解决你的问题,请参考以下文章
如何从存储过程中获取嵌套游标 - Java & Oracle