1:創建存儲過程
此存儲過程通過傳入的參數(Name),返回一個參數(address)。
create or replace PRocedure demo_procedure(namedemo in varchar2,addressdemo out varchar2)asbegin select address into addressdemo from system.demo where name=namedemo;end;
2:java部分:調用存儲過程時,要用CallabelStatement的prepareCall 方法。結構:{call 存儲過程名(?,?,...)}
在設置參數的時候,輸入參數用set,輸出參數要registerOutParameter。取出輸出參數的值可以直接用CallabelStatement的get方法
import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.sql.Types; public class TestProcedureTwo { public TestProcedureTwo() { } public static void main(String[] args ){ String driver = "Oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@localhost:1521:myoracle"; Statement stmt = null; ResultSet rs = null; Connection conn = null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, "system", "admin"); CallableStatement proc = null; proc = conn.prepareCall("{ call dem_procedure(?,?) }"); //調用存儲過程 proc.setString(1, "kalision"); //存儲過程傳入的參數 proc.registerOutParameter(2, Types.VARCHAR); //存儲過程輸出的參數 proc.execute(); String testPrint = proc.getString(2); System.out.println("存儲過程返回的值是:"+testPrint); } catch (SQLException ex2) { ex2.printStackTrace(); } catch (Exception ex2) { ex2.printStackTrace(); } finally{ try { if(rs != null){ rs.close(); if(stmt!=null){ stmt.close(); } if(conn!=null){ conn.close(); } } } catch (SQLException ex1) { } } } }
新聞熱點
疑難解答