Java调用Oracle存储过程详解
Java调用Oracle存储过程详解
步骤:
1、编写Oracle存储过程
2、编写数据库获取连接工具类
3、编写简单应用调用存储过程
实现:
1、Oracle存储过程:
/*测试表*/ createtabletest( idvarchar2(32), namevarchar2(32) ); /*存储过程插入数据*/ CREATEORREPLACEPROCEDUREinsert_procedure( PARA1INVARCHAR2, PARA2INVARCHAR2 )AS BEGIN INSERTINTOtest(id,name)VALUES(PARA1,PARA2); ENDinsert_procedure; /*存储过程返回结果集*/ CREATEORREPLACEPROCEDUREselect_procedure( para_idINVARCHAR2, nameOUTsys_refcursor/*这个sys_refcursor类型在SYS.STANDARD包中*/ )AS BEGIN OPENnameFOR SELECT*FROMtestWHEREid=para_id; END;
2、JDBC工具类
importjava.sql.Connection; importjava.sql.DriverManager; importjava.sql.ResultSet; importjava.sql.SQLException; importjava.sql.Statement; publicclassDBUtil{ publicstaticfinalStringDRIVER="oracle.jdbc.driver.OracleDriver"; publicstaticfinalStringURL="jdbc:oracle:thin:@localhost:1521/orcl"; publicstaticfinalStringUSERNAME="pfm"; publicstaticfinalStringPASSWORD="pfm"; /** *通过静态代码块注册数据库驱动 */ static{ try{ Class.forName(DRIVER); }catch(ClassNotFoundExceptione){ e.printStackTrace(); } } /** *获得Connection * *@return */ publicstaticConnectiongetConnection(){ Connectionconn=null; try{ conn=DriverManager.getConnection(URL,USERNAME,PASSWORD); }catch(SQLExceptione){ e.printStackTrace(); } returnconn; } /** *获得Statement * *@return */ publicstaticStatementgetStatement(){ Statementst=null; try{ st=getConnection().createStatement(); }catch(SQLExceptione){ e.printStackTrace(); } returnst; } /** *关闭ResultSet * *@paramrs */ publicstaticvoidcloseResultSet(ResultSetrs){ if(rs!=null){ try{ rs.close(); }catch(SQLExceptione){ e.printStackTrace(); } } } /** *关闭Statement * *@paramst */ publicstaticvoidcloseStatement(Statementst){ if(st!=null){ try{ st.close(); }catch(SQLExceptione){ e.printStackTrace(); } } } /** *关闭Connection * *@paramconn */ publicstaticvoidcloseConnection(Connectionconn){ if(conn!=null){ try{ conn.close(); }catch(SQLExceptione){ e.printStackTrace(); } } } /** *关闭全部 * *@paramrs *@paramsta *@paramconn */ publicstaticvoidcloseAll(ResultSetrs,Statementsta,Connectionconn){ closeResultSet(rs); closeStatement(sta); closeConnection(conn); } }
3、调用存储过程:
importjava.sql.CallableStatement; importjava.sql.Connection; importjava.sql.PreparedStatement; importjava.sql.ResultSet; importjava.sql.SQLException; importoracle.jdbc.driver.OracleTypes; /** *测试调用存储过程 * */ publicclassStoredTest{ publicstaticvoidmain(String[]args){ insert_call(); //select_call(); } /** *执行存储过程插入数据 */ publicstaticvoidinsert_call(){ Connectionconn=DBUtil.getConnection(); PreparedStatementpst=null; CallableStatementproc=null;//创建执行存储过程的对象 try{ proc=conn.prepareCall("{callinsert_procedure(?,?)}"); proc.setString(1,"1");//设置第一个输入参数 proc.setString(2,"hellocall");//设置第一个输入参数 proc.execute();//执行 }catch(SQLExceptione){ e.printStackTrace(); }finally{ try{ //关闭IO流 proc.close(); DBUtil.closeAll(null,pst,conn); }catch(Exceptione){ e.printStackTrace(); } } } /** *执行存储过程查询数据 */ publicstaticvoidselect_call(){ Connectionconn=DBUtil.getConnection(); CallableStatementstmt; try{ stmt=conn.prepareCall("{callselect_procedure(?,?)}");//用此调用方法不能实现多行语法 stmt.setString(1,"1"); stmt.registerOutParameter(2,OracleTypes.CURSOR); stmt.execute(); ResultSetrs=(ResultSet)stmt.getObject(2); while(rs.next()){ System.out.println(rs.getString("name")); } }catch(SQLExceptione){ e.printStackTrace(); }finally{ DBUtil.closeConnection(conn); } } }
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!