0 0

jdbc封装求教30

   我写了个JDBC封装类,现在在使用的过程中遇到点问题,希望各位指教,帮我解决此问题,具体问题如下:
  
    其中的一个方法:
          /**
	 * @description 执行查询sql,此处不能关闭statement,原因是如果在finally里关闭了statement,则resultSet也关闭了,怎么才能关闭它呢?
	 * @param con
	 * @param sql
	 * @return
	 */
	public static ResultSet executeQuery(Connection con,String sql) {
		if(null == con) {
			throw new IllegalArgumentException("the parameter connection[con] is null !");
		}
		Statement stm = null;
		try {
			stm = con.createStatement();
		    ResultSet result = stm.executeQuery(sql);
			return result;
		} catch (SQLException e) {
			 try {
				con.rollback();
			} catch (SQLException e1) {
				e1.printStackTrace();
			}
			e.printStackTrace();
			getLogger().fatal("执行SQL["+sql+"]时出现异常!具体异常信息为:	"+e.getMessage());
		}


现在的问题就如注释,我需要在此封装类外使用这个方法,取完ResultSet的值后,需要关闭ResultSet以及Statement,不然创建的太多会大大影响性能。

     请大家帮我看看,给我个解决方法,如果有好的JDBC封装类的话,发个给我,感激不尽,谢谢!
 
2010年1月30日 14:56

7个答案 按时间排序 按投票排序

0 0

采纳的答案

这样是否可以,只是写了大概代码,省去了异常捕获。核心思想就是JDBC的那些共用部分封装到一个类中,业务代码取数据的部分,以接口的形式传入进来。
/*
*
*此类只把JDBC的一些操作封装起来,没有和业务代码耦合。
*与接口WrapprIface进行一个rs的传递
*/
class  DBAccess
{
	private Connection conn;
	public  DBAccess(String ds){
		conn = //find datasource and create conn
	}
	public void query(String sql, ArrayList paramsList, WrapprIface  wrapper) {
	    Preparements statement = conn.preparestatement(sql);
		if (paramsList != null && !paramsList.isEmpty())
		{
			//设置进来参数
			statement.set......
		}
	    Result rs = null;
        rs = statement.query();
		//先这个类里,进行自己的业务逻辑,这样不会和JDBC耦合了。WrapprIface见下面的接口定义
        wrapper.wrap(rs);
		finally {
		closeRsAndStatement(rs, statement);
		}
	}
	private void closeRsAndStatement(Result rs, Statement st) {
		//关闭这两个
	}
        public void closeConnection() {
            this.conn.close();
        }

}
/**
*根据传入的Rs,取得需要数据,转换为指定的对象,
*其它业务代码调用getRs(),再把指定对象取得。
*/
interface WrapprIface
{
	void wrap(Result rs);
	T getRs();
}

2010年1月31日 22:59
0 0

应该把取得的RS值取出来,在本类关闭掉他

2010年2月01日 12:38
0 0

加finally就可以

2010年2月01日 08:55
0 0

上面的一个很大的缺点是,需要外界主动调用关闭连接的方法,容易忘记。

2010年1月31日 23:01
0 0

可以单独封装一个closeStatement方法和closeResultSet方法,必要的话,在关闭的时候再做一次判断,并且声明异常。

2010年1月30日 16:59
0 0



性能暂不要考虑,考虑下解耦吧。您可以将ResultSet封装成Map对象,返回Map。ResultSet就可以关闭了。

2010年1月30日 16:40
0 0

你的关闭顺序错了,要先关闭ResultSet、再关闭statement就没问题了.....

2010年1月30日 16:04

相关推荐

    JDBC封装的工具类

    JDBC封装的工具类,将所有共同的代码提取过来,形成工具类

    jdbc封装(实现对实体的增删改查[分页]).zip

    jdbc封装(实现对实体的增删改查[分页]),辅助学习Hibernate 包含三个文件夹,分别是: code-access实现 是用access实现的,本意是access方便,就一个文件,方便部署。但access有好多不支持,就写成这样.主要是可参考Dao...

    jdbc封装工具类

    jdbc封装工具类,此类事封装成list,Object>>格式,可直接把转换为jsonArray格式传输数据。

    JDBC封装.rar

    "JDBC封装"是指将常见的数据库操作,如增删改查(CRUD:Create, Read, Update, Delete),进行模块化和抽象化的过程,以便于在代码中重复使用和简化数据库交互。下面将详细介绍JDBC封装的原理、步骤以及它带来的好处...

    JDBC封装类

    标题:JDBC封装类 描述:此文章将详细介绍一个用于简化Java中JDBC操作的封装类,该类通过提供一系列方法来加速数据库编程任务,包括建立数据库连接、执行查询、处理结果集以及执行更新操作。 ### 一、JDBC封装类...

    jdbc封装包

    【标题】:JDBC封装包 【描述】:JDBC(Java Database Connectivity)是Java语言中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。这个封装包是我个人制作的,旨在简化...

    JDBC封装步骤

    文档脉络清楚的详述了实现JDBC封装所需要进行的步骤。

    Java连接数据库 JDBC封装类 带使用例子

    Java JDBC封装类,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类使用。

    java增删改查JDBC封装类(泛型封装)

    "java增删改查JDBC封装类(泛型封装)"这个主题是关于如何利用泛型来优化JDBC操作,以提高代码的可读性、安全性和复用性。以下将详细讲解这个主题涉及的知识点。 1. **JDBC基础**: - JDBC是Java中连接数据库的标准...

    自己写个JDBC封装

    **标题:“自己写个JDBC封装”** 在Java开发中,JDBC(Java Database Connectivity)是连接Java应用程序和关系数据库的标准接口。然而,原始的JDBC API使用起来相对繁琐,需要编写大量的重复代码,例如建立数据库...

    jdbc完全封装实现增删改查

    实现完全的对jdbc对象的封装,只需调用则可对数据库进行CRUD操作

    JDBC封装类升级版,支持DBCP、C3P0连接池,Java连接数据库带例子

    Java JDBC封装类升级版,带增删改查例子,支持oracle,MySql,hsqldb 等,支持事务,返回数据格式 支持二维数组,MAP格式,以及javabean对象。有利于初学者DbDemo.java为demo,Connect为jdbc封装类,可以作为项目共通类...

    Scala的JDBC封装包Scweery.zip

    Scweery 是 Scala 一个封装了 JDBC 操作用来从 SQL 中创建 Scala 对象的工具包。 示例代码: using(petsDB) { connection => val findHogsQuery = "select name, gender from pets where family='erinaceidae' ...

    jdbc-utils.rar_Utils_jdbc_jdbc封装

    "jdbc-utils.rar_Utils_jdbc_jdbc封装"这个压缩包提供了一些工具类,用于简化JDBC操作,提高代码的可读性和可维护性。下面我们将详细探讨JDBC封装处理类的原理和实现。 1. **JDBC基础** - JDBC API包括一组Java...

    java JDBC封装库

    自己封装好的,基于commons的DBBase,DBCP的数据库工具。支持线程池,支持直接对象化操作。即无需任何映射,只要是java标准类,属性带标准set、get,属性名称与查询结果集中字段名称相同,就可以直接查询出对象链表...

    SpringBoot中封装jdbc工具类

    现在的数据层的开发,大多会使用...但是在一些极端的场景下往往原生的jdbc方式操作数据库更灵活,性能更高。由于部分场景下MyBatis或JPA之类无法满足我的需求,所以我打算自己封装一套查数据库的工具类。 文章地址: ...

    原创的JDBC封装可支持各种数据库

    在实际应用中,这些步骤往往重复且繁琐,因此进行JDBC封装是提高代码复用性和减少错误的有效方式。 1. **加载驱动**: 在Java程序中,我们需要通过Class.forName()方法加载对应的数据库驱动。封装时,我们可以将...

    DB.rar_jdbc封装

    本压缩包“DB.rar_jdbc封装”显然是一个关于如何使用Java JDBC进行数据库连接封装的示例或教程。下面我们将详细探讨JDBC以及如何进行封装。 首先,JDBC是Java平台上的一个接口,它允许Java应用程序与各种数据库进行...

    类似hibernate的jdbc封装

    标题提到的"类似hibernate的jdbc封装"就是这样的一个实践,它试图在不引入庞大框架的情况下,提供类似Hibernate的便捷性。 首先,我们来了解JDBC(Java Database Connectivity),它是Java中用于连接数据库的标准...

Global site tag (gtag.js) - Google Analytics