欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

DBCP连接池&&C3P0连接池&&Druid德鲁伊连接池

程序员文章站 2022-05-24 12:30:54
...

常见连接池的使用

连接池简介:
	由于建立数据库连接是一种非常耗时,耗资源的行为。所以通过连接池预先同数据库建立一些连接,放在内
	存中,应用程序需要建立数据库连接时直接到连接池中申请一个就行,使用完毕后再归还到连接池中。
	数据库连接池负责分配,管理和释放数据库连接,它允许应用程序重复使用一个现有的数据库连接,而不是
	再重新建立一个;释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数
	据库连接遗漏。这项技术能明显提高对数据库操作的性能。
	连接池的基本思想就是在系统初始化的时候,将数据库连接作为对象存储在内存中,当用户需要访问数据库
	时,并非建立一个新的连接,而是从连接池中取出一个已建立的空闲连接对象,使用完毕后,用户也并非将
	连接关闭,而是将连接放回连接池中,以供下一个请求访问使用,而连接的建立,断开都由连接池自身来管
	理,同时,还可以通过设置连接池的参数来控制连接池中的初始连接数,连接的上下限数以及每个连接的最
	大使用次数,最大空闲时间等等。也可以通过其自身的管理机制来监视数据库连接的数量和使用情况等。

DBCP连接池

DBCP(DataBase Connection Pool) 数据库连接池,是Java数据库连接池的一种,由Apache开发,通过数据库
连接池,是可以让程序自动管理数据库连接的释放和断开。
DBCP:1.依赖DBCP的两个jar包,还有MySQL的驱动jar包。

方式1:硬编码

//创建连接池
BasicDataSource ds = new BasicDataSource();
//配置信息
ds.setDriverClassName("com.mysql.jdbc.Driver");
ds.setUrl("jdbc:mysql://localhost:3306/mydb");
ds.setUsername("root");
ds.setPassword("1234");
//建立连接
Connection connection = ds.getConnection();
System.out.println(connection);
//获取操作对象
PreparedStatement preparedStatement = connection.prepareStatement("select * from users");

方式2:采取配置文件的方式

//配置文件:基本连接配置
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=1234

//存放配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("dbcp.properties"));
//设置
//properties.setProperty("driverClassName", "com.mysql.jdbc.Driver");
//创建连接池
DataSource dataSource = BasicDataSourceFactory.createDataSource(properties);
//建立连接
Connection connection = dataSource.getConnection();
System.out.println(connection);

C3P0连接池

	c3p0是一个开源的JDBC连接池,它实现了数据源和JNDI绑定,支持JDBC3规范和JDBC2的标准扩展,目前使
用它的开源项目有Hibernate、Spring等。
c3p0与dbcp区别
dbcp没有自动回收空闲连接的功能
c3p0有自动回收空闲连接功能
c3p0:依赖c3p0的一个jar包,还有数据库的驱动jar包。

方式1:硬编码

//创建连接池
ComboPooledDataSource comboPooledDataSource = new ComboPooledDataSource();
//设置基本参数
comboPooledDataSource.setDriverClass("com.mysql.jdbc.Driver");
comboPooledDataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
comboPooledDataSource.setUser("root");
comboPooledDataSource.setPassword("1234");
//建立连接
Connection connection = comboPooledDataSource.getConnection();
System.out.println(connection);

方式2:采取配置文件的方式

配置文件要求:
要求1:文件名必须是固定的。c3p0.properties
要求2:文件必须放在src下
//配置文件:基本链接配置
c3p0.driverClass=com.mysql.jdbc.Driver
c3p0.jdbcUrl=jdbc:mysql:///mydb
c3p0.user=root
c3p0.password=1234

//使用默认的配置
ComboPooledDataSource ds = new ComboPooledDataSource();
Connection conn = ds.getConnection();
System.out.println(conn);

Druid 阿里德鲁伊连接池

Druid是阿里巴巴开源平台上的一个数据库连接池实现,它结合了C3P0,DBCP,PROXOOL等DB池的优点,同时也
加入了日志监控,可以很好的监控DB池连接和SQL的执行情况,可以说是针对监控而生的DB连接池(据说是目前最
好的连接池)。Druid是Java语言中最好的数据库连接池,Druid能够提供强大的监控和扩展功能,它可以替换
DBSP和C3P0连接池,Druid提供了一个高效,功能强大,可扩展性好的数据库连接池。

方式1:硬编码

//采用硬编码的方式来创建连接池
DruidDataSource druidDataSource = new DruidDataSource();
//设置参数
druidDataSource.setDriverClassName("com.mysql.jdbc.Driver");
druidDataSource.setUrl("jdbc:mysql://localhost:3306/mydb");
druidDataSource.setUsername("root");
druidDataSource.setPassword("1234");
//获取连接对象
DruidPooledConnection connection = dataSource.getConnection();
System.out.println(connection);

方式2:采用配置文件的方式

1.引入配置文件
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/mydb
username=root
password=1234
2.加载配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("druid.properties"));
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
Connection connection = dataSource.getConnection();
System.out.println(connection);

DBUtils

	Commons DbUtils是Apache组织提供的一个对JDBC进行简单封装的开源工具类库,使用它能够简化JDBC应用程序的开发,同时也不会影响程序的性能。 
使用步骤:
		1.导入jar包(commons-dbutils-1.4.jar)
		2.创建一个queryrunner类
			queryrunner作用:操作sql语句
				构造方法:
					new QueryRunner(Datasource ds);
		3.编写sql
		4.执行sql
			query(..):执行r操作
			update(...):执行cud操作
//创建对象
QueryRunner queryRunner = new QueryRunner(dataSource);
//查询列表
List<bank> list = queryRunner.query("select * from bank", new BeanListHandler<bank>(bank.class));
System.out.println(list);
System.out.println("----------------------------");
bank bank = queryRunner.query("select * from bank where id=? and money=?", new BeanHandler<bank>(bank.class), 1, 5000);
System.out.println(bank);
System.out.println("----------------------------");
//修改更新数据
int i = queryRunner.update("update bank set username=?,money=? where id=?", "杨某人", 20000,1);
System.out.println(i);