数据库连接池与DBUtils工具

数据库连接池,简称dbcp database connection pool
数据库的连接是非常耗费系统资源的,一个应用通常都是需要与数据库打交道,也就需要经常连接数据库,这样导致浪费大量系统资源;
连接池的原理就是:
我事先创建好几个数据库连接放着,当我的系统需要操作数据库时就从连接池里直接拿连接,并将这个连接标记为 忙 ;用完后在放会池中,标记为 空闲;
当连接池里的连接都在被使用,如果此时还要连接,连接池就会在创建连接放到池里,,这些连接的数量,都是在配置文件里由我控制的。
数据库连接池的运行机制:
(1) 程序初始化时创建连接池
(2) 使用时向连接池申请可用连接
(3) 使用完毕,将连接返还给连接池
(4) 程序退出时,断开所有连接,并释放资源
在这里插入图片描述
为了获取数据库连接对象(Connection),JDBC提供了javax.sql.DataSource接口,它负责与数据库建立连接,并定义返回值为Connection对象的方法。例:
Connection getConnection() 通过无参的方式建立与数据库的连接;
Connection getConnection(String username, String password) 通过传入登录信息的方式与数据库的连接。
在使用DBCP数据源时,需要导入:
commons-dbcp.jar包(它是DBCP数据源的实现包,包含所有操作数据库连接信息和数据库连接池初始化信息的方法,并实现了DataSource接口的getConnection()方法);
commons-pool.jar包 (它是DBCP数据库连接池实现包的依赖包,为commons-dbcp,jar包中的方法提供了支持)。
BasicDataSource是DataSource接口的实现类,主要包括设置数据源对象的方法,常用方法有:
void setDriverClassName(String driverClassName) (设置连接数据库的驱动名称)
void setUrl(String url) (设置连接数据库的路径)
void setUsername(String username) (设置数据库的登录账号)
void setPassword(String password) (设置数据库的登录密码)
void setInitialSize(int initialSize) (设置数据库连接池初始化的连接数目)
void setMaxActive(int maxldle) (设置数据库连接池最大活跃的连接数目)
void setMinldle(int minldle) (设置数据库连接池最小闲置的连接数目)
Connection getConnection() (从连接池中获取一个数据库连接)
BasicDataSourceFactory是创建BasicDataSource 对象的工厂类,它包含一一个返回值为BasicDataSource对象的方法createDataSource(),该方法通过读取配置文件的信息生成数据源对象并返回给调用者。这种把数据库的连接信息和数据源的初始化信息提取出来写进配置文件的方式,让代码看起来更加简洁,思路也更加清晰。
1.通过BasicDataSource类直接创建数据源对象
(1)在Eclipse 中创建一一个名称为chapter10 的Web项目,在项目chapter10中导入mysql-connector-java- 5.0.8-bin.jar、commons- -dbcp-1.4.jar以及commons -pool-1.6.jar 3个JAR包,并发布到类路径下,然后在项目的src目录下创建包cn.itcast.chapter 10.example,并在该包下创建一个Example01类,该类采用手动方式获取数据库的连接信息和数据源的初始化信息:
Example01.java

package cn.itcast.chapter10.example;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSource;
public class Example01 {
   
	public static DataSource ds = null;
	static {
   
		// 获取DBCP数据源实现类对象
		BasicDataSource bds = new BasicDataSource();
		// 设置连接数据库需要的配置信息
		bds.setDriverClassName("com.mysql.jdbc.Driver");
		bds.setUrl("jdbc:mysql://localhost:3306/jdbc");
		bds.setUsername("root");
		bds.setPassword("itcast");
		// 设置连接池的参数
		bds.setInitialSize(5);
		bds.setMaxActive(5);
		ds = bds;
	}
	public static void main(String[] args) throws SQLException {
   
		// 获取数据库连接对象
		Connection conn = ds.getConnection();
		//获取数据库连接信息
		DatabaseMetaData metaData = conn.getMetaData();
		//打印数据库连接信息
		System.out.println(metaData.getURL()
             +",UserName="+metaData.getUserName()
             +","+metaData.getDriverName());
	}
}

(3)运行main()方法:
jdbc:mysql://localhost:3306/jdbc,UserName=root@localhost,MySQL-AB JDBC Driver
2.通过读取配置文件创建数据源对象:
(1)在chapter10项目的src目录下创建dbcpconfig.properties文件,用于设置数据库的连接信息和数据源的初始化信息:
dbcpconfig.properties

 #连接设置
 driverClassName=com.mysql.jdbc.Driver
 url=jdbc:mysql://localhost:3306/jdbc
 username=root
 password=itcast
 #初始化连接
 initialSize=5
 #最大连接数量
 maxActive=10
 #最大空闲连接
 maxIdle=10

(2)在cn.itcast.chapter10.example包下创建一个Example02类,从配置文件中获取数据库的连接信息和数据源的初始化信息:
Example02.java

package cn.itcast.chapter10.example;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DatabaseMetaData;
import java.sql.SQLException;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
public class Example02 {
   
	public static DataSource ds = null;
	static {
   
		// 新建一个配置文件对象
		Properties prop = new Properties();
		try {
   
			// 通过类加载器找到文件路径,读配置文件
			InputStream in = new Example02().getClass().getClassLoader()
					.getResourceAsStream("dbcpconfig.properties");
			// 把文件以输入流的形式加载到配置对象中
			prop.load(in);
			// 创建数据源对象
			ds = BasicDataSourceFactory.createDataSource(prop);
		} catch (Exception e) {
   
			throw new ExceptionInInitializerError(e);
		}
	}
	public static void main(String[] args) throws SQLException {
   
		// 获取数据库连接对象
		Connection conn = ds.getConnection();
		//获取数据库连接信息
		DatabaseMetaData metaData = conn.getMetaData();
		//打印数据库连接信息
         System.out.println(metaData.getURL()
              +",UserName="+metaData.getUserName()   
                    +","+metaData.getDriverName());	
    }
}

(3)运行main()方法:
jdbc:mysql://localhost:3306/jdbc,UserName=root@localhost,MySQL-AB JDBC Driver
C3P0数据源是目前最流行的开源数据库连接池之一,它实现了DataSource数据源接口,支持JDBC2和JDBC3的标准规范,易于扩展并且性能优越,著名的开源框架Hibernate和Spring都支持该数据源。
ComboPooledDataSource类的常用方法:
void setDriverClass() (设置连接数据库的驱动名称)
void setJdbcUrl() (设置连接数据库的路径)
void setUser() (设置数据库的登录账号)
void setPassword() (设置数据库的登录密码)
void setMaxPoolSize() (设置数据库连接池最大的连接数目)
void setMinPoolSize() (设置数据库连接池最小的连接数目)
void setInitialPoolSize() (设置数据库连接池初始化的连接数目)
Connection getconnection() (从数据库连接池中获取一个连接)
1.通过ComboPooledDataSource()构造方法创建数据源对象
(1)在项目chapter10中导入JAR包c3p0-0.9.12.jar,然后在cn.itcast.chapter10.example包下创建一个Example03类,使用C3P0数据源手动代码的方式获取Connection对象:
Example03.java

package cn.itcast.chapter10.example;
import java.sql.SQLException;
import javax.sql.Da
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值