【oracle】存储过程12--Java调用存储过程

导入jar     Oracle_10g_10.2.0.4_JDBC_ojdbc14.jar
package procedure;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class JDBCUtils {

	 
	private static String driver = "oracle.jdbc.OracleDriver";
	private static String url = "jdbc:oracle:thin:@localhost:1521:orcl";
	private static String user = "username";
	private static String password = "123456";
	
	//注册数据库驱动
	static{
		try {
			Class.forName(driver);
		} catch (Exception e) {
			System.out.println("抛异常了==========");
			throw new ExceptionInInitializerError(e);
		}
	}
	
	/**
	 * 获取数据库连接
	 * @return
	 */
	public static Connection getConnection(){
		try {
			return DriverManager.getConnection(url,user,password);
		} catch (SQLException e) {
			System.out.println("获取数据库连接失败");
			e.printStackTrace();
		}
		return null;
	}
	
	/**
	 * 释放数据库连接资源
	 * @param conn
	 * @param st
	 * @param rs
	 */
	public static void release(Connection conn,Statement st,ResultSet rs){
		if (rs!=null) {
			try {
				rs.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				rs = null;
			}
		}
		
		if (st!=null) {
			try {
				st.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				st = null;
			}
		}
		
		if (conn!=null) {
			try {
				conn.close();
			} catch (SQLException e) {
				e.printStackTrace();
			}finally{
				conn = null;
			}
		}
	}

}
======================================================================================
package procedure;

import java.sql.CallableStatement;
import java.sql.Connection;

import org.junit.Test;

import oracle.jdbc.OracleTypes;

public class ProcedureTest {
	public static void main(String[] args) { 
		
		String sql = "{call p_inAndOutparam(?,?,?)}";
		
		Connection conn = null;
		CallableStatement call = null;
		try {
			//得到一个数据库连接
			conn = JDBCUtils.getConnection();
			
			//通过连接创建出statement
			call = conn.prepareCall(sql);
			//对于in参数,赋值
			call.setInt(1, 2);  // (第几个问号,要赋的值)
			//对out参数,声明
			call.registerOutParameter(2, OracleTypes.VARCHAR);  //(第几个问号,声明的类型)
			call.registerOutParameter(3, OracleTypes.VARCHAR);
		
		
			//执行调用
		   call.execute();
			
			//取出结果
		 
			String userName = call.getString(2);
 
			String banji = call.getString(3);
			System.out.println("用户姓名:"+userName+"    班级:"+banji);
			
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
                    //关闭连接,释放资源
       JDBCUtils.release(conn, call, null);
		}
		
	}

}
调用的存储过程:
create or replace procedure p_inAndOutparam(in_id IN student0.id%TYPE,out_name OUT student0.name%TYPE,out_class OUT student0.class%TYPE) is
begin
  
select name,class into   out_name,out_class  from  student0  where id =in_id;

end p_inAndOutparam ;
 

猜你喜欢

转载自blog.csdn.net/weixin_40074861/article/details/121855246