Oracle 在JDBC中使用 存储过程,包

前提:

    在Oracle中已经定义  存储过程  和  存储函数 和  包

    导入了Oracle的JDBC   jar  包

 1 package demo;
 2
 3 import java.sql.Connection;
 4 import java.sql.DriverManager;
 5 import java.sql.ResultSet;
 6 import java.sql.SQLException;
 7 import java.sql.Statement;
 8
 9 public class JDBCUtils {
10     private static String driver = "oracle.jdbc.OracleDriver";
11     private static String url = "jdbc:oracle:thin:@192.168.56.101:1521:orcl";
12     private static String user = "scott";
13     private static String password = "tiger";
14
15     static{
16         try {
17             Class.forName(driver);
18         } catch (ClassNotFoundException e) {
19             throw new ExceptionInInitializerError(e);
20         }
21         //DriverManager.registerDriver(driver)
22     }
23
24     public static Connection getConnection(){
25         try {
26             return DriverManager.getConnection(url, user, password);
27         } catch (SQLException e) {
28             e.printStackTrace();
29         }
30         return null;
31     }
32
33     /*
34      * 运行Java程序
35      * java -Xms100M -Xmx200M HelloWorld
36      *
37      * 技术方向:
38      * 1. 性能调优  ---> tomcat
39      * 2. 故障诊断  ---> 死锁
40      */
41     public static void release(Connection conn,Statement st,ResultSet rs){
42         if(rs != null){
43             try {
44                 rs.close();
45             } catch (SQLException e) {
46                 e.printStackTrace();
47             }finally{
48                 rs = null;// ----> java GC
49             }
50         }
51         if(st != null){
52             try {
53                 st.close();
54             } catch (SQLException e) {
55                 e.printStackTrace();
56             }finally{
57                 st = null;
58             }
59         }
60         if(conn != null){
61             try {
62                 conn.close();
63             } catch (SQLException e) {
64                 e.printStackTrace();
65             }finally{
66                 conn = null;
67             }
68         }
69     }
70 }

Jdbc工具类

  1 package demo;
  2
  3 import java.sql.CallableStatement;
  4 import java.sql.Connection;
  5 import java.sql.ResultSet;
  6
  7 import oracle.jdbc.OracleCallableStatement;
  8 import oracle.jdbc.OracleTypes;
  9
 10 import org.junit.Test;
 11
 12 public class TestOracle {
 13 /*
 14  * create or replace procedure queryempinfo(eno in number,
 15                                             pename out varchar2,
 16                                             psal   out number,
 17                                             pjob   out varchar2)
 18  */
 19     @Test
 20     public void testProcedure(){
 21         //{call <procedure-name>[(<arg1>,<arg2>, ...)]}
 22         String sql = "{call queryempinfo(?,?,?,?)}";
 23
 24         Connection conn = null;
 25         CallableStatement call = null;
 26         try {
 27             conn = JDBCUtils.getConnection();
 28             call = conn.prepareCall(sql);
 29
 30             //对于in参数,赋值
 31             call.setInt(1, 7839);
 32
 33             //对于out参数,申明
 34             call.registerOutParameter(2, OracleTypes.VARCHAR);
 35             call.registerOutParameter(3, OracleTypes.NUMBER);
 36             call.registerOutParameter(4, OracleTypes.VARCHAR);
 37
 38             //执行
 39             call.execute();
 40
 41             //取出结果
 42             String name = call.getString(2);
 43             double sal = call.getDouble(3);
 44             String job = call.getString(4);
 45             System.out.println(name+"\t"+sal+"\t"+job);
 46         } catch (Exception e) {
 47             e.printStackTrace();
 48         }finally{
 49             JDBCUtils.release(conn, call, null);
 50         }
 51     }
 52
 53 /*
 54  * create or replace function queryempincome(eno in number)
 55 return number
 56  */
 57     @Test
 58     public void testFunction(){
 59         //{?= call <procedure-name>[(<arg1>,<arg2>, ...)]}
 60         String sql = "{?=call queryempincome(?)}";
 61
 62         Connection conn = null;
 63         CallableStatement call = null;
 64         try {
 65             conn = JDBCUtils.getConnection();
 66             call = conn.prepareCall(sql);
 67
 68             //第一个是out参数
 69             call.registerOutParameter(1, OracleTypes.NUMBER);
 70             //第二个是in参数
 71             call.setInt(2, 7839);
 72
 73             call.execute();
 74
 75             //取出年收入
 76             double income = call.getDouble(1);
 77             System.out.println(income);
 78         } catch (Exception e) {
 79             e.printStackTrace();
 80         }finally{
 81             JDBCUtils.release(conn, call, null);
 82         }
 83     }
 84
 85
 86     @Test
 87     public void testCursor(){
 88         String sql = "{call MYPAKCAGE.queryEmpList(?,?)}";
 89
 90         Connection conn = null;
 91         CallableStatement call = null;
 92         ResultSet rs = null;
 93         try {
 94             conn = JDBCUtils.getConnection();
 95             call = conn.prepareCall(sql);
 96
 97             //对于in参数,赋值
 98             call.setInt(1, 20);
 99             //对于out参数  申明
100             call.registerOutParameter(2, OracleTypes.CURSOR);
101
102             call.execute();
103
104             //取出结果
105             rs = ((OracleCallableStatement)call).getCursor(2);
106             while(rs.next()){
107                 //取出一个员工
108                 String name = rs.getString("ename");
109                 double sal = rs.getDouble("sal");
110                 System.out.println(name+"\t"+sal);
111             }
112         } catch (Exception e) {
113             e.printStackTrace();
114         }finally{
115             JDBCUtils.release(conn, call, rs);
116         }
117     }
118 }

测试类

时间: 2024-10-12 14:08:10

Oracle 在JDBC中使用 存储过程,包的相关文章

oracle 11g jdbc jar包在哪个文件目录

一. 如果装了oracle数据库的话, 大致是这样的目录:    D:\oracle\product\11.2.0\client_1\oui\jlib\classes12.jar 或者    D:\oracle\product\11.2.0\dbhome_1\oui\jlib\classes12.jar 注意: 对于oracle11的jdbc\lib下没有classer12.jar文件(注:我在Windows8中安装11g时,这个文件是存在的,导入myeclipse10里面很好用), 但是有oj

开发PL/SQL子程序和包及使用PL/SQL编写触发器、在JDBC中应用Oracle

1.  子程序的各个部分: 声明部分.可执行部分.异常处理部分(可选) 2.子程序的分类: A.  过程 - 执行某些操作 a.  创建过程的语法: CREATE [OR REPLACE]  PROCEDURE  <procedure name> [(<parameter list>)]  IS|AS <local variable declaration> BEGIN <executable statements> [EXCEPTION <excep

在Java语言中调用存储过程、存储函数、包头、包体

需要拷贝连接Oracle的jar包,路径如下图所示: 连接Oracle数据库的代码: package demo.utils; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; public class JDBCUtils { private static Stri

jdbc中的Statement对象和Preparedstatement对象的区别,以及通过jdbc操作调用存储过程

一. java.sql.*   和  javax.sql.*的包的类结构 |- Driver接口: 表示java驱动程序接口.所有的具体的数据库厂商要来实现此接口. |- connect(url, properties):  连接数据库的方法. url: 连接数据库的URL URL语法: jdbc协议:数据库子协议://主机:端口/数据库 user: 数据库的用户名 password: 数据库用户密码 |- DriverManager类: 驱动管理器类,用于管理所有注册的驱动程序 |-regis

Oracle中的存储过程

 pl/sql编程语言是Oracle中操作数据库最快的语言,而存储过程本质就是pl/sql,所以通过存储过程来对数据库进行CRUD是最有效的. 不再使用JDBC来进行CRUD操作,因为使用JDBC来进行CRUD操作效率低. 所以,Java通过调用存储过程,来间接调用pl/sql,达到对数据库的CRUD操作. 我们可以把CRUD操作封装到存储过程中,在程序中,调用存储过程即可. 以下是例子:来自于Oracle讲师赵强 --打印Hello World /* 调用存储过程 1. exec sayH

oracle 存储过程 包 【转】

一.为什么要用存储过程? 如果在应用程序中经常需要执行特定的操作,可以基于这些操作简历一个特定的过程.通过使用过程可以简化客户端程序的开发和维护,而且还能提高客户端程序的运行性能. 二.过程的优点? 1.预编译:存储过程预先编译好放在数据库内,减少编译语句所花的时间. 2.缓存:预编译的存储过程会进入缓存,所以对于经常执行的存储过程,除了第一次执行外,其它次数的执行速度会明显提高. 3.减少网络传输:特别是对于一些处理数据的存储过程,不必像直接使用SQL语句那样多次传送数据到客户端. 4 .可维

用sql语句导出oracle中的存储过程和函数

用sql语句导出oracle中的存储过程和函数: SET echo off ; SET heading off ; SET feedback off ; SPOOL 'C:/PRC.SQL' replace SELECT CASE WHEN LINE = 1 THEN 'CREATE OR REPLACE ' || TEXT WHEN LINE = MAX_LINE THEN TEXT || CHR(10 ) || '/' ELSE TEXT END FROM USER_SOURCE A LEF

Oracle中的存储过程简单例子

---创建表 create table TESTTABLE ( id1  VARCHAR2(12), name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE (ID1, NAME) values ('1', 'zhangsan'); insert into TESTTABLE (ID1, NAME) values ('2', 'lisi'); insert into TESTTABLE (ID1

在PL/SQL中调用存储过程--oracle

在oracle10中写好了存储过程,代码如下: CREATE OR REPLACE Procedure Proc_Insert ( sName in varchar2, sAge in int, sExeTime in varchar2 ) is begin Insert into T_TEST(C_ID, C_NAME, C_AGE, C_INTIME, C_EXETIME) values(T_TEST_CID.nextval,sName,sAge, sysdate, to_date(sExe