JDBC使用阿里巴巴Druid数据库连接池(数据源)

本文介绍如何在Java项目中配置和使用Druid数据库连接池,包括在pom.xml中添加依赖,创建jdbc.properties文件配置数据库信息,以及在DBUtil.java中实现连接池的初始化和连接获取。Druid提供监控功能,有助于提升数据访问效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Druid是一个关系型数据库连接池,它是阿里巴巴的一个开源项目。Druid支持所有JDBC兼容数据库,包括了Oracle、MySQL、PostgreSQL、SQL Server、H2等。Druid在监控、可扩展性、稳定性和性能方面具有明显的优势。通过Druid提供的监控功能,可以实时观察数据库连接池和SQL查询的工作情况。使用Druid连接池在一定程度上可以提高数据访问效率。

第一步在pom.xml里加入依赖库。
 

<dependencies>
	<!-- MySQL相关包 -->
	<dependency>
		<groupId>mysql</groupId>
		<artifactId>mysql-connector-java</artifactId>
		<version>5.1.26</version>
	</dependency>
	<!-- 数据库连接池 -->
	<dependency>
		<groupId>com.alibaba</groupId>
		<artifactId>druid</artifactId>
		<version>1.0.20</version>
	</dependency>
</dependencies>

第二步创建jdbc.properties文件,我相信同学们会创建javacto.taobao.com学习网址

第三步创建DBUtil.java

package com.javacto.utils;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
import com.alibaba.druid.pool.DruidDataSource;

/**
 * 学习网址:javacto.taobao.com
 */
public class DBUtil {
	// 声明druid连接池对象
	private static DruidDataSource pool;

	/** 数据库 链接URL地址 **/
	private static String url;
	/** 账号 **/
	private static String username;
	/** 密码 **/
	private static String password;
	/** 初始连接数 **/
	private static int initialSize = 5;
	/** 最大活动连接数 **/
	private static int maxActive = 5;
	/** 最小闲置连接数 **/
	private static int minIdle = 5;
	/** 连接耗尽时最大等待获取连接时间 **/
	private static long maxWait = 1000;

	private static String fileName = "/jdbc.properties";

	static {
		init();
	}

	/**
	 * 加载属性文件并读取属性文件中的内容将其设置给连接信息
	 * 
	 * @param propName
	 */
	private static void loadProp() {
		try {
			// 属性文件位于src根目录时,加"/"则不要使用ClassLoader,如果使用ClassLoader则无需"/"
			InputStream is = DBUtil.class.getResourceAsStream(fileName);
			Properties p = new Properties();
			p.load(is);

			url = p.getProperty("jdbc.url");
			username = p.getProperty("jdbc.username");
			password = p.getProperty("jdbc.password");

			/*
			 * initialSize = Integer.parseInt(p.getProperty("initialSize"));
			 * maxActive = Integer.parseInt(p.getProperty("maxActive")); maxWait
			 * = Integer.parseInt(p.getProperty("maxWait")); minIdle =
			 * Integer.parseInt(p.getProperty("minIdle"));
			 */
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	private static void init() {
		pool = new DruidDataSource();
		// 加载属性文件,初始化配置
		loadProp();
		pool.setUrl(url);
		pool.setUsername(username);
		pool.setPassword(password);

		// 设置连接池中初始连接数
		pool.setInitialSize(initialSize);
		// 设置最大连接数
		pool.setMaxActive(maxActive);
		// 设置最小的闲置链接数
		pool.setMinIdle(minIdle);
		// 设置最大的等待时间(等待获取链接的时间)
		pool.setMaxWait(maxWait);
	}

	/**
	 * 链接获取
	 * 
	 * @return
	 */
	public static Connection getConn() {
		try {
			// 如果连接池为空或者被异常关闭,则重新初始化一个
			if (pool == null || pool.isClosed()) {
				init();
			}
			return pool.getConnection();
		} catch (SQLException e) {
			e.printStackTrace();
		}
		return null;

	}

	/**
	 * 资源关闭
	 * 
	 * @param stmt
	 * @param conn
	 */
	public static void close(Statement stmt, Connection conn) {
		try {
			if (stmt != null) {
				stmt.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}
	}


	/**
	 * 封装通用的更新操作,对所有更新(INSERT,UPDATE,DELETE)有关的操作都能通过该方法实现
	 * 
	 * @param sql
	 * @return
	 * 
	 */
	public static boolean exeUpdate(Connection conn, String sql, Object... obj) {
		PreparedStatement ps = null;
		try {
			ps = conn.prepareStatement(sql);
			for (int i = 0; i < obj.length; i++) {
				ps.setObject(i + 1, obj[i]);
			}
			return ps.executeUpdate() > 0;
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			close(ps, null);
		}
		return false;
	}
    //测试
	public static void main(String[] args) {
		System.out.println(DBUtil.getConn());
	}

}

 

更多学习资料:javacto.taobao.com

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值