jdbc处理游标以及2个常见异常

下午我写了一篇关于mybatis执行存储过程的文章,但是呢时间关系没来得及说用jdbc来执行的方法,大家可以参考我的这篇文章

http://blog.csdn.net/chenwill3/article/details/7651155

这个文章是好久以前写的,里面只处理了简单数据,没有说到游标的用法。原理很简单,因为游标这种数据其实就类似于resultset,也就是说只需要拿到resultset在从里面取数据就好了,一起来看看吧

1.我自己写的一个数据库连接工具类

package org.lxh.util;

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

public class DBConnectionUtil {
	private static final String DBDRIVER = "oracle.jdbc.driver.OracleDriver";
	private static final String DBURL = "jdbc:oracle:thin:@127.0.0.1:1521:ORCL";
	private static final String DBUSER = "scott";
	private static final String DBPASSWORD = "123456";
	private Connection conn = null;

	public DBConnectionUtil() {
		try {
			Class.forName(DBDRIVER);
			this.conn = DriverManager.getConnection(DBURL, DBUSER, DBPASSWORD);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	public Connection getConnection() {
		return this.conn;
	}

	public void close() throws Exception {
		if (this.conn != null) {
			try {
				this.conn.close();
			} catch (Exception e) {
				// TODO Auto-generated catch block
				throw e;
			}
		}
	}

}

2.使用CallableStatement执行存储过程并处理游标

package org.lxh.junit;

import org.lxh.util.DBConnectionUtil;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;

public class Test2 {
	@org.junit.Test
	public void showList() throws Exception {

		DBConnectionUtil util = new DBConnectionUtil();
		Connection getConn = util.getConnection();
		CallableStatement cs = getConn
				.prepareCall("{call GETTEACHER(cur_arg=> :cur_arg)}");
		cs.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
		cs.execute();
		ResultSet rs = (ResultSet) cs.getObject(1);
		while (rs.next()) {
			System.out.println(rs.getInt(1) + "," + rs.getString(2) + ","
					+ rs.getString(3));
		}
		getConn.close();

	}
}

我顺便把存储过程贴出来

CREATE OR REPLACE Procedure getTeacher(cur_arg out Sys_Refcursor)
As
begin
    open cur_arg for Select * From teacher;
End

下面来看看执行的结果,jdbc执行的时候比mybatis快很多也不知道为什么


最后来看2个异常,第一个如下

Caused by: java.lang.ClassNotFoundException: javax.persistence.EntityListeners
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 29 more

这个异常是因为缺少jpa的jar包,下面是第二个异常

Caused by: java.lang.ClassNotFoundException: javax.transaction.SystemException
	at java.net.URLClassLoader$1.run(Unknown Source)
	at java.security.AccessController.doPrivileged(Native Method)
	at java.net.URLClassLoader.findClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
	at java.lang.ClassLoader.loadClass(Unknown Source)
	... 34 more

这个异常是因为缺少jta的jar包,2个异常经常在hibernate开发时候出现。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值