java中調用oracle的存儲過程


  存儲過程是在大型數據庫系統中,一組為了完成特定功能的SQL 語句集,存儲在數據庫中,經過第一次編譯后再次調用不需要再次編譯,用戶通過指定存儲過程的名字並給出參數(如果該存儲過程帶有參數)來執行它。今天,我們就開始學習java中調用oracle的存儲過程。

 

java中調用oracle的存儲過程

項目結構如下:

一、 在數據庫創建存儲過程的腳本,如果使用的是本地的oracle數據庫,則需要開啟服務:OracleOraDb11g_home1TNSListener和OracleServiceORCL。

存儲過程實現:輸入用戶的工號,輸出用戶的名字、薪水和工作。

復制代碼
create or replace procedure queryempinfo(eno in number,
pename out varchar2,
psal out number,
pjob out varchar2)
as
begin
--得到該員工的姓名 月薪和職位
select ename, sal, job into pename, psal, pjob from emp where empno = eno;
end;
復制代碼

 

 二、 在項目中引入oracle的jdbc的jar包,Procedure的代碼如下:

復制代碼
package com.tomhu.procedure;

import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.jdbc.OracleTypes;

public class Procedure {

    private Connection conn;
    private CallableStatement stat;
    private ResultSet rs;

    String url = "jdbc:oracle:thin:@127.0.0.1:1521:orcl";
    String driverName = "oracle.jdbc.driver.OracleDriver";
    String username = "scott";
    String password = "******";
    String sql = "call queryempinfo(?,?,?,?)";

    // 調用存儲過程
    public void callProcedure() {
        try {
            Class.forName(driverName);
            conn = DriverManager.getConnection(url, username, password);
            stat = conn.prepareCall(sql);

            // 一個輸入參數和三個輸出參數
            stat.setInt(1, 7566);
            stat.registerOutParameter(2, OracleTypes.VARCHAR);
            stat.registerOutParameter(3, OracleTypes.NUMBER);
            stat.registerOutParameter(4, OracleTypes.VARCHAR);
            stat.execute();

            String name = stat.getString(2);
            int sal = stat.getInt(3);
            String job = stat.getString(4);

            System.out.println("name: " + name + ", sal: " + sal + ", job: " + job);

        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            close(conn, stat, rs);
        }
    }

    // 關閉連接
    public void close(Connection conn, CallableStatement stat, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                rs = null;
            }
        }
        if (stat != null) {
            try {
                stat.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                stat = null;
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                conn = null;
            }
        }
    }

    public static void main(String[] args) {
        new Procedure().callProcedure();
    }
}
復制代碼

 

三、 得到的輸出結果:

name: JONES, sal: 2975, job: MANAGER

轉自 https://www.cnblogs.com/huhx/p/JavaProcedure.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM