栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

数据库连接池与DBUtils工具

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

数据库连接池与DBUtils工具

一、什么是数据库连接池
在JDBC编程中,每次创建和断开Connection对象都会消耗一定的时间和IO资源。这是因为Java程序与数据库之间建立连接时,数据库端要验证用户名和密码,并且要为这个连接分配资源,JAVA程序则要把代表连接的 java.sql.Connection对象加载到内存中,所以建立数据连接的开销很大,尤其是在大量的并发访问时。假如某网站一天的访问量是10万,那么该网站的服务器就需要创建,断开连接10万次,频繁地创建,断开数据库连接势必会影响数据库的访问效率,甚至导致数据库的崩溃

为了避免频繁地创建数据库连接,数据库连接池技术应运而生。数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用现有的数据库连接,而不是重新建立

数据库连接池在初始化时将创建一定数量的数据库连接放到连接池中,当应用程序访问数据库时并不是直接创建Connection,而是向连接池申请一个Connection。如果连接池中有空闲的Connection,则将其返回,否则创建新的Connection。使用完毕后,连接池会将该Connection回收,并交付其他的线程使用,以减少创建和断开数据库连接的次数,

二、1.2 DataSource接口
为了获取数据库连接对象,JDBC提供了javax.sql.DataSource接口,它负责与数据库建立连接,并定义了返回值为Connection对象的方法
1).Connection getConnection()
2).Connection getConnection(String username,String password)
上述两个重载的方法都能用来获取Connection对象。不同的是,第1个方法是通过无参的方式建立与数据库的连接,第2个方法是通过传入登录信息的方式建立于数据库的连接
接口通常都会有其实现类,javax.sql.DataSource接口也不例外,通常习惯性地把实现了javax.sql.DataSource接口的类称为数据源,顾名思义,数据源即数据的来源。在数据源中存储了所有建立数据库的连接信息。就像通过指定文件名称可以在文件系统中找到文件一样,也可以找到相应的数据库连接
数据源包含数据库连接池。如果数据是水,数据库就是水库,数据源就是连接到水库的管道,终端用户看到的数据集是管道里流出来的水。一些开源组织提供了数据源的独立实现,常用的有DBCP数据源和C3P0数据源
三、DBCP数据源
DBCP:是数据库连接池的简称,是Apache组织下的开源连接池的实现,也是Tomcat服务器使用的连接池组件。单独使用DBCP数据源时,需要在应用程序中导入两个JAR包
1).commons-dbcp.jar包
commons-dbcp.jar包:是DBCP数据源的实现包,包含所有操作数据库连接信息和数据库连接池初始化信息的方法,并实现了DataSource接口的getConnection()方法
2).commons-pool.jar包
commons-pool.jar包:是DBCP数据库连接池实现包的依赖包

package cn.itcast.chapter10.example;
import java.sql.Connection;                                                                                                                                             
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import org.apache.commons.dbutils.ResultSetHandler;
public class baseDao {
 	// 优化查询
 	public static Object query(String sql, ResultSetHandler rsh, 
		                       Object... params) throws SQLException {
		Connection conn = null;
		PreparedStatement pstmt = null;
		ResultSet rs = null;
		// 定义一个返回结果
		Object obj = null;
		try {
			// 获得连接
			conn = JDBCUtils.getConnection();
			// 预编译sql
			pstmt = conn.prepareStatement(sql);
			// 将参数设置进去
			for (int i = 0; params != null && i < params.length; i++)
			  {
				pstmt.setObject(i + 1, params[i]);
			}
			// 发送sql
			rs = pstmt.executeQuery();
			// 让调用者去实现对结果集的处理
			obj = rsh.handle(rs);
		} catch (Exception e) {
			// 出现异常,返回封装的异常信息
			return new Exception(e.getMessage());
		}finally {
			// 释放资源
			JDBCUtils.release(rs, pstmt, conn);
		}
		return obj;
 	}
}



package cn.itcast.jdbc.demo;
import java.sql.SQLException;
public class DBUtilsDaoTest3 {
	private static DBUtilsDao dao = new DBUtilsDao();
	public static void testdelete() throws SQLException {
		boolean b = dao.delete(4);
		System.out.println(b);
	}
	public static void main(String[] args) throws SQLException {
		testdelete();
	}
}



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/697048.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号