1.实现步骤
1.1 导入jar包和配置文件
导入jar包,连接池jar包选择一个即可
导入工具类
src下导入配置文件,任选其一
1.2 编写代码
- 第一步 创建QueryRunner对象
- 第二步 QueryRunner对象执行sql语句,返回结果
- 第三步 关闭连接
2. 代码示例
https://blog.csdn.net/qq_39331255/article/details/106363225
3. 补充
1.JDBCUtils代码(封装三种连接池创建连接,关闭连接的方法)
package utils;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import javax.sql.DataSource;
import org.apache.commons.dbcp.BasicDataSourceFactory;
import org.apache.commons.dbutils.DbUtils;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import com.mchange.v2.c3p0.ComboPooledDataSource;
public class JDBCUtils {
//ThreadLocal:保证一个线程中只能有一个连接
private static ThreadLocal<Connection> tl = new ThreadLocal<Connection>();
/**
*
* @Description 获取数据库的连接
* @author shkstart
* @date 上午9:11:23
* @return
* @throws Exception
*/
private static String user=null;
private static String password=null;
private static String url=null;
private static String driverClass=null;
static{
// 1.读取配置文件中的4个基本信息,类加载器读取文件
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties pros = new Properties();
try {
pros.load(is);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
user = pros.getProperty("username");
password = pros.getProperty("password");
url = pros.getProperty("url");
driverClass = pros.getProperty("driverClass");
// 2.加载驱动
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static Connection getConnection() throws Exception {
// 3.获取连接
Connection conn = tl.get();
if (conn == null) {
conn = DriverManager.getConnection(url, user, password);
tl.set(conn);
}
return conn;
}
/**
*
* @Description 使用C3P0的数据库连接池技术
* @author shkstart
* @date 下午3:01:25
* @return
* @throws SQLException
*/
//数据库连接池只需提供一个即可。
private static ComboPooledDataSource cpds = new ComboPooledDataSource("ljh");
public static Connection getConnection1() throws SQLException{
Connection conn = tl.get();
if (conn == null) {
conn = cpds.getConnection();
tl.set(conn);
}
return conn;
}
/**
*
* @Description 使用DBCP数据库连接池技术获取数据库连接
* @author shkstart
* @date 下午3:35:25
* @return
* @throws Exception
*/
//创建一个DBCP数据库连接池
private static DataSource source;
static{
try {
Properties pros = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("dbcp.properties");
pros.load(is);
source = BasicDataSourceFactory.createDataSource(pros);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection2() throws Exception{
Connection conn = tl.get();
if (conn == null) {
conn = source.getConnection();
tl.set(conn);
}
return conn;
}
/**
* 使用Druid数据库连接池技术
*/
private static DataSource source1;
static{
try {
Properties pros = new Properties();
InputStream is = JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties");
pros.load(is);
source1 = DruidDataSourceFactory.createDataSource(pros);
} catch (Exception e) {
e.printStackTrace();
}
}
public static Connection getConnection3() throws SQLException{
Connection conn = tl.get();
if (conn == null) {
conn = source1.getConnection();
tl.set(conn);
}
return conn;
}
/**
*
* @Description 关闭连接和Statement的操作
* @author shkstart
* @date 上午9:12:40
* @param conn
* @param ps
*/
public static void closeConn(){
Connection conn = tl.get();
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
tl.set(null);
}
public static void closeResource(Statement ps){
try {
if(ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
closeConn();
}
/**
*
* @Description 关闭资源操作
* @author shkstart
* @date 上午10:21:15
* @param conn
* @param ps
* @param rs
*/
public static void closeResource(Statement ps,ResultSet rs){
try {
if(ps != null)
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
closeConn();
}
/**
*
* @Description 使用dbutils.jar中提供的DbUtils工具类,实现资源的关闭
* @author shkstart
* @date 下午4:53:09
* @param conn
* @param ps
* @param rs
*/
public static void closeResource1(Statement ps,ResultSet rs){
// try {
// DbUtils.close(conn);
// } catch (SQLException e) {
// e.printStackTrace();
// }
// try {
// DbUtils.close(ps);
// } catch (SQLException e) {
// e.printStackTrace();
// }
// try {
// DbUtils.close(rs);
// } catch (SQLException e) {
// e.printStackTrace();
// }
DbUtils.closeQuietly(ps);
DbUtils.closeQuietly(rs);
closeConn();
}
}
2.数据库连接池配置文件(本文提供三种连接池的配置,选择其一即可)
2.1 c3p0-config.xml代码
<c3p0-config>
<!-- 默认配置,如果没有指定则使用这个配置 -->
<default-config>
<!-- 基本配置 -->
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/test</property>
<property name="user">root</property>
<property name="password">123456</property>
<!--扩展配置-->
<property name="checkoutTimeout">30000</property>
<property name="idleConnectionTestPeriod">30</property>
<property name="initialPoolSize">10</property>
<property name="maxIdleTime">30</property>
<property name="maxPoolSize">100</property>
<property name="minPoolSize">10</property>
<property name="maxStatements">200</property>
</default-config>
<!-- 命名的配置 -->
<named-config name="ljh">
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql://127.0.0.1:3306/test</property>
<property name="user">root</property>
<property name="password">123456</property>
<!-- 如果池中数据连接不够时一次增长多少个 -->
<property name="acquireIncrement">5</property>
<property name="initialPoolSize">20</property>
<property name="minPoolSize">10</property>
<property name="maxPoolSize">40</property>
<property name="maxStatements">20</property>
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
2.2 dpcp.properties代码
driverClassName=com.mysql.jdbc.Driver
url=jdbc:mysql:///test
username=root
password=123456
initialSize=10
2.3 druid.properties代码
url=jdbc:mysql:///test
username=root
password=123456
driverClassName=com.mysql.jdbc.Driver
initialSize=10
maxActive=10
2.4 jdbc.properties代码
url=jdbc:mysql:///test
username=root
password=123456
driverClass=com.mysql.jdbc.Driver
3.jar包说明
mysql-connector-java-5.1.39-bin.jar MySQL驱动
c3p0-0.9.1.2.jar c3p0数据库连接池
commons-dbcp-1.4.jar,commons-pool-1.5.5.jar dbcp数据库连接池
druid-1.1.10.jar Druid数据库连接池
commons-dbutils-1.3.jar jdbc工具类库
4.数据库连接池介绍(推荐使用Druid)
- DBCP 是Apache提供的数据库连接池。tomcat 服务器自带dbcp数据库连接池。速度相对c3p0较快,但因自身存在BUG,Hibernate3已不再提供支持。
- C3P0 是一个开源组织提供的一个数据库连接池,**速度相对较慢,稳定性还可以。**hibernate官方推荐使用
- Proxool 是sourceforge下的一个开源项目数据库连接池,有监控连接池状态的功能,稳定性较c3p0差一点
- BoneCP 是一个开源组织提供的数据库连接池,速度快
- Druid 是阿里提供的数据库连接池,据说是集DBCP 、C3P0 、Proxool 优点于一身的数据库连接池,但是速度不确定是否有BoneCP快