jdbc中使用数据库连接池和DbUtils实现增删改查

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.jarcommons-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快
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值