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);
}
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!