由於前邊有寫java代碼調用數據庫,感覺應該把java調用存儲過程也寫一下,所以筆者補充該篇!
package testSpring; import java.sql.CallableStatement; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import oracle.jdbc.OracleTypes; public class Test1 { public static void main(String[] args) { Connection con=null; ResultSet res=null; CallableStatement call=null; try { Class.forName("oracle.jdbc.driver.OracleDriver"); String url="jdbc:oracle:thin:@192.168.224.87:1523:orcl"; String userName="gb_report"; String passWord="gb_report123$"; System.out.println("連接數據庫成功!"); con=DriverManager.getConnection(url,userName,passWord); call=con.prepareCall("{call P_COMMON.QUERY_PROVINCE_PAGE(?,?,?,?,?,?,?,?,?,?,?)}");//P_COMMON為包名,QUERY_PROVINCE_PAGE為存儲過程名,?代表參數 call.registerOutParameter(4, OracleTypes.NUMBER);//參數下標為4及返回值的類型 call.registerOutParameter(5, OracleTypes.NUMBER); call.registerOutParameter(7, OracleTypes.NUMBER); call.registerOutParameter(8, OracleTypes.INTEGER); call.registerOutParameter(9, OracleTypes.VARCHAR); call.registerOutParameter(10,OracleTypes.VARCHAR); call.registerOutParameter(11,OracleTypes.CURSOR);//注意這里返回值類型為游標 call.setString(1, "");//參數下標為1,輸入參數類型為varchar(java對應string) call.setString(2, ""); call.setString(3, ""); call.setString(6, ""); //執行 call.execute(); res = (ResultSet)call.getObject(11);//接受參數下標為11的返回值為游標類型,用ResultSet while(res.next()){ System.out.println("行政ID:"+res.getString("ITEMID")+";省份名稱:"+res.getString("ITEMNAME")+";"); } } catch (Exception e) { e.printStackTrace(); }finally{ try { if(res!=null){ res.close(); }else if(call!=null){ call.close(); }else if (con!=null) { con.close(); } System.out.println("關閉連接!"); } catch (Exception e2) { e2.printStackTrace(); } } } }