java 呼叫oracle 儲存過程

simplewp發表於2012-11-03

1)在oracle的scott下,建立一個儲存過程(查詢工資最高人的資訊,假設只有一個)
create or replace procedure proc_querysal( v_empno out emp.empno%type , v_ename out emp.ename%type , v_sal out emp.ename%type )
as
begin
select empno , ename , sal into v_empno ,v_ename , v_sal from emp where sal = (select max(sal) from emp);
end;
/

2)java 呼叫 proc_querymax
package com.wp.oracle;

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



public class OracleConn
{
    private final static String DB_URL = "jdbc:oracle:thin:@192.168.0.22:1521:simple";
    private final static String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
    private final static String DB_USERNAME = "scott";
    private final static String DB_PASSWORD = "scott";

    public Connection getConnection()
    {
        Connection conn = null;
        try
        {
            /** 使用Class.forName()方法自動建立這個驅動程式的例項且自動呼叫DriverManager來註冊它 */
            Class.forName(DB_DRIVER);
            /** 通過DriverManager的getConnection()方法獲取資料庫連線 */
            conn = DriverManager.getConnection(DB_URL, DB_USERNAME, DB_PASSWORD);
            /*
            if (conn != null)
            {
                System.out.print("OK");
            };
            */
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }
        return conn;
    }

    public void closeConnection(Connection conn)
    {
        try
        {
            if (conn != null)
            {
                /** 判斷當前連線連線物件如果沒有被關閉就呼叫關閉方法 */
                if (!conn.isClosed())
                {
                    conn.close();
                }
            }
        } catch (Exception ex)
        {
            ex.printStackTrace();
        }
    }
   
   
   
   
    public static void main(String[] args)
    {
        OracleConn racleConn = new OracleConn();
       
        Connection conn = oracleConn.getConnection();
       
        try
        {
            /*
            Statement proc = conn.createStatement();
           
            proc.execute("call scott.dept_proc() ");
            */
           
            CallableStatement proc = conn.prepareCall("{call scott.proc_querysal(?,?,?)}");
           
            proc.registerOutParameter(1, Types.INTEGER);
            proc.registerOutParameter(2, Types.VARCHAR);
            proc.registerOutParameter(3, Types.INTEGER);
           
            proc.execute();
           
            String result = "工資最高人的資訊:編號:"+proc.getInt(1)+",姓名:"+proc.getString(2)+",工資:"+proc.getInt(3);
           
           
            System.out.print(result);
           
           
           
        } catch (SQLException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
       
       
        oracleConn.closeConnection(conn);   
       
    }
   
   

   
   
   
   
   
   
   
   
   
   
   
   
   

}


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/27009266/viewspace-748271/,如需轉載,請註明出處,否則將追究法律責任。

相關文章