创建存储过程并用java调用实例
先要在pl/sql中建立相关表和存储过程
用eclipse建立测试类TestProcedureimport java.sql.*;public class TestProcedure {/** * @param args */public static void main(String[] args) {String driver = "oracle.jdbc.driver.OracleDriver"; String strUrl = "jdbc:oracle:thin:@192.168.16.161:1521:ora11g"; Connection conn = null; CallableStatement cstmt = null; ResultSet rs=null; try { Class.forName(driver); conn = DriverManager.getConnection(strUrl, "wu", "1"); /** 调用无返回值的存储过程 */ cstmt = conn.prepareCall("{ call testa(?,?) }"); cstmt.setInt(1, 1); cstmt.setString(2, "TestOne"); cstmt.execute(); System.out.println("插入数据成功"); /** 调用有返回值的存储过程 */ cstmt = conn.prepareCall("{ call testb(?,?) }"); cstmt.setInt(1, 1); cstmt.registerOutParameter(2, Types.VARCHAR); cstmt.execute(); String testPrint = cstmt.getString(2); System.out.println("name:"+testPrint); /** 调用有返回值且是多条记录的存储过程 */ cstmt = conn.prepareCall("{ call testc(?) }"); cstmt.setInt(1, 1); cstmt.registerOutParameter(1,oracle.jdbc.OracleTypes.CURSOR); cstmt.execute(); rs = (ResultSet)cstmt.getObject(1); while(rs.next()) { System.out.println("id:" + rs.getString(1) + " name:"+rs.getString(2)); } } catch (Exception ex) { ex.printStackTrace(); } finally{ try { if(conn!=null){ conn.close(); } if(cstmt!=null){ cstmt.close(); } }catch (Exception e) {e.printStackTrace();} }}}
参考:http://www.blogjava.net/TrampEagle/archive/2005/12/13/23605.html