数据库连接池的代码示例
1、DHCP数据库连接池,这是apache的一个项目,凡是数据库连接池都要实现javax.sql.DataSource接口,换句话说,实现了这个借口的类就是一个数据库连接池。
代码如下:
package com.test.dhcp;
import java.sql.Connection;
import java.sql.SQLException;
import org.apache.commons.dbcp.BasicDataSource;
public class JdbcUtils {
public static void main(String[] args) {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/mysql");
dataSource.setDriverClassName("com.mysql.jdbc.Driver");
dataSource.setUsername("root");
dataSource.setPassword("123456");
Connection conn = null;
try {
conn = dataSource.getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
System.out.println(conn);
}
}
数据库连接池的close()方法的执行效果和mysql提供的实现类的方法有所不同,这里用到了装饰者模式。加强了close()方法,在调用该方法时会把数据库连接归还给连接池。
2、C3P0数据库连接池
2.1第一种代码实现方式:
package com.test.dhcp;
import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Demo2 {
public static void main(String[] args) {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
try {
dataSource.setDriverClass("com.mysql.jdbc.Driver");
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/cctrace");
dataSource.setUser("root");
dataSource.setPassword("123456");
Connection conn = dataSource.getConnection();
System.out.println(conn);
} catch (PropertyVetoException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
2.1第二种代码实现方式:
在src路径下创建一个xml文件,文件名为c3p0-config.xml ,必须这么命名。文件内容为:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/cctrace</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
</default-config>
</c3p0-config>
这个dataSource的一些个别的属性(最大连接数等自行配置)。
获取链接部分代码如下:
package com.test.dhcp;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Demo3 {
public static void main(String[] args) {
ComboPooledDataSource dataSource = new ComboPooledDataSource();
try {
Connection conn = dataSource.getConnection();
System.out.println(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
如果配置了多个数据库,那么可以使用命名的方式来获取该连接
xml文件配置路径同上,文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<default-config>
<property name="jdbcUrl">jdbc:mysql://localhost:3306/cctrace</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
</default-config>
<named-config name="bigData">
<property name="jdbcUrl">jdbc:mysql://localhost:3306/bigData</property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="user">root</property>
<property name="password">123456</property>
</named-config>
</c3p0-config>
获取连接部分的代码如下:
package com.test.dhcp;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class Demo3 {
public static void main(String[] args) {
ComboPooledDataSource dataSource = new ComboPooledDataSource("bigData");
try {
Connection conn = dataSource.getConnection();
System.out.println(conn);
} catch (SQLException e) {
e.printStackTrace();
}
}
}