使用JDBC访问存储过程

发表时间:2017-05-11 16:58:09 浏览量( 21 ) 留言数( 0 )

学习目标:

1、了解Java的历史

2、为什么要学习Java语言

3、端正学习态度


学习过程:

把对数据库的操作封装成为存储过程,然后使用jdbc可以调用这个存储过程,这样可以大大简化jdbc的工作,而且还有很多优点:

  • 提高运行效率。

  • 提高安全性。

  • 减少网络传输。

要调用存储过程,可以使用CallableStatement接口,这个接口专门就是设计用于调用存储过程的。调用的格式是:

{call 存储过程名称(?,?)}

打开MyEclipse,新建一个项目,先导入oracle的驱动包,上一节课我们已经建立了两个存储过程。下面我们使用jdbc调用者两个存储过程,代码如下:

 public class TestDao {

	//连接信息,用户可以自己修改
	private String driver = "oracle.jdbc.driver.OracleDriver";
	private String url = "jdbc:oracle:thin:@192.168.11.23:1521:orcl";
	private String username = "root";
	private String password = "root";

	public void test() throws Exception {

		Class.forName(driver);

		Connection con = DriverManager.getConnection(url, username, password);

		// CallableStatement 访问存储过程 sql={call 存储过程名称(?,?)}
		CallableStatement callableStatement = con
				.prepareCall("{call count_goods(?,?)}");

		// 输入参数和以前一样设置
		callableStatement.setInt(1, 1);

		// 注册输出参数
		callableStatement.registerOutParameter(2, OracleType.STYLE_INT);

		// 执行
		callableStatement.executeUpdate();

		// 取得返回值
		int result = callableStatement.getInt(2);

		System.out.println("result=" + result);
		
		callableStatement.close();
		con.close();

	}

	// 如果返回值是游标的存储过程
	public void test2() throws Exception {
		Class.forName(driver);
		Connection con = DriverManager.getConnection(url, username, password);
		// CallableStatement 访问存储过程 sql={call 存储过程名称(?,?)}
		CallableStatement callableStatement = con
				.prepareCall("{call goods_nameall(?,?)}");
		
		callableStatement.setString(1, "%的%");
		
		callableStatement.registerOutParameter(2, OracleTypes.CURSOR);
		
		callableStatement.executeUpdate();
		
		ResultSet rs=(ResultSet) callableStatement.getObject(2);
		
		while(rs.next()){
			String gname=rs.getString("goods_name");
			Double price=rs.getDouble("cash");
			
			System.out.println(gname+":"+price);
		}
		
		rs.close();
		callableStatement.close();
		con.close();
	}

	public static void main(String[] args) throws Exception {
		TestDao testDao = new TestDao();
		testDao.test2();
	}

}