阿里的开源连接池框架druid的使用

news/2024/7/5 1:46:11 标签: java, mysql, 数据库, 数据源, druid

文章目录

  • Jdbc 的不足
  • 数据连接池(DBCP)
  • 数据源框架(druid
    • 使用流程
  • 完整代码

Jdbc 的不足

jdbc:java数据库的桥梁

步骤:

  • 注册驱动 Class.forName()—>一次
  • 建立连接 Connection —>每一次
  • 预处理对象PreparedStatement
    • Statement对象 sql拼接—>SQL注入漏洞
    • PreparedStatement对象
      • public interface PreparedStatement extends Statement
  • 执行SQL
  • 关闭连接—>每一次
    建立连接(消耗资源) 关闭连接(释放资源)

数据连接池(DBCP)

  1. 定义好连接数
  2. 从连接池查找是否有空闲连接
  3. 使用空闲连接
  4. 放回池子中

druid_23">数据源框架(druid

阿里巴巴的开源连接池框架

使用流程

  1. 创建druid.properties配置文件
java">druid.driver = com.mysql.cj.jdbc.Driver
druid.url = jdbc:mysql://localhost:3306/mvc_db?useUnicode=true&characterEncoding=utf8&useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true
druid.username=root
druid.password=1234
  1. 使用Properties对象,读取配置文件
java">// 用来解析properties文件
	private static class DruidPropertiesConfig {

		void load() {
			try {
				// 得到配置文件的路径
				String path = Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath();
				 String fileName = path + "com/dyit/vrius/resources/druid.properties";
				//String fileName = "D:\\sts-workspace\\vuris-sys\\src\\com\\dyit\\vrius\\resources\\druid.properties";

				Properties prop = new Properties();

				prop.load(new FileReader(fileName));

				JdbcUtil.prop = prop;
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				Logger.getLogger(this.getClass()).debug(e.getMessage());
			}

		}

	}
  1. 引入druid.jar包(jar包放在文末),然后创建数据数据源对象DruidDataSource
java">// 私有化构造方法 采用双检模式来创建单例
	private JdbcUtil() {
		// 首先加载配置文件
		new DruidPropertiesConfig().load();
		// 得到数据源对象
		ds = new DruidDataSource();
		// 加载配置文件
		ds.configFromPropety(prop);
		Logger.getLogger(this.getClass()).debug("数据源配置成功");
	}
  1. 建立连接
java">public static void connect() {
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			Logger.getLogger(JdbcUtil.class).debug(e.getMessage());
			e.printStackTrace();
		}

	}

jdbc–> 封装(static)–>properties(配置文件)–>数据源(dbcp)–>单例

完整代码

java">package com.dyit.vrius.util;

/*
 * 对数据库操作进行封装
 */
import java.io.FileReader;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties;

import org.apache.log4j.Logger;

import com.alibaba.druid.pool.DruidDataSource;

//创建单例模式
public class JdbcUtil {

	// 创建Propertise对象以便于创建数据源
	private static Properties prop;
	// 私有化类实例 创建单例模式
	private static JdbcUtil instance = null;
	// 创建数据源
	private DruidDataSource ds;
	// 创建数据库链接对象
	private Connection conn;
	// 创建面板对象
	private PreparedStatement prep;
	// 创建resultset集合
	private ResultSet rs;

	// 用来解析properties文件
	private static class DruidPropertiesConfig {

		void load() {
			try {
				// 得到配置文件的路径
				String path = Thread.currentThread().getContextClassLoader().getResource("").toURI().getPath();
				 String fileName = path + "com/dyit/vrius/resources/druid.properties";
				//String fileName = "D:\\sts-workspace\\vuris-sys\\src\\com\\dyit\\vrius\\resources\\druid.properties";

				Properties prop = new Properties();

				prop.load(new FileReader(fileName));

				JdbcUtil.prop = prop;
			} catch (Exception e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
				Logger.getLogger(this.getClass()).debug(e.getMessage());
			}

		}

	}

	// 私有化构造方法 采用双检模式来创建单例
	private JdbcUtil() {
		// 首先加载配置文件
		new DruidPropertiesConfig().load();
		// 得到数据源对象
		ds = new DruidDataSource();
		// 加载配置文件
		ds.configFromPropety(prop);
		Logger.getLogger(this.getClass()).debug("数据源配置成功");
	}

	public static JdbcUtil getInstance() {
		if (instance == null) {
			synchronized (JdbcUtil.class) {
				if (instance == null) {
					instance = new JdbcUtil();
				}
			}
		}

		return instance;
	}

	// 建立链接
	public void connect() {
		try {
			conn = ds.getConnection();
		} catch (SQLException e) {
			Logger.getLogger(this.getClass()).debug(e.getMessage());
			e.printStackTrace();
		}

	}

	// 得到preparedStatment面板
	public void preparedStatment(String sql, Object... vals) {
		try {
			prep = conn.prepareStatement(sql);
			for (int i = 0; i < vals.length; i++) {
				prep.setObject(i + 1, vals[i]);
			}
		} catch (SQLException e) {
			Logger.getLogger(this.getClass()).debug(e.getMessage());
			e.printStackTrace();
		}
	}

	// 执行语句
	public void executeUpdate() {
		try {
			prep.executeUpdate();
		} catch (SQLException e) {
			Logger.getLogger(this.getClass()).debug(e.getMessage());
			e.printStackTrace();
		}
	}

	// 查询语句
	public ResultSet executeQuery() {
		try {
			rs = prep.executeQuery();
		} catch (SQLException e) {
			Logger.getLogger(this.getClass()).debug(e.getMessage());
			e.printStackTrace();
		}
		return rs;
	}

	// 关闭链接
	public void close() {
		try {
			if (rs != null) {
				rs.close();
			}
			if (prep != null) {
				prep.close();
			}
			if (conn != null) {
				conn.close();
			}
		} catch (Exception e) {
			Logger.getLogger(this.getClass()).debug(e.getMessage());
			e.printStackTrace();
		}
	}

}

jar包连接

java">链接:https://pan.baidu.com/s/1F0BVqHAd3ABJ9DijMLzGPw 
提取码:88u9

http://www.niftyadmin.cn/n/1440855.html

相关文章

百度搜索引擎使用指南(转)

百度搜索使用了高性能的“网络蜘蛛”程序(Spider)自动的在互联网中搜索信息&#xff0c;可定制、高扩展性的调度算法使得搜索器能在极短的时间内收集到最大数量的互联网信息。百度搜索在中国和美国均设有服务器&#xff0c;搜索范围涵盖了中国大陆、香港、台湾、澳门、新加坡等…

如何计算 N叉树的最大深度

文章目录题目简述TreeNode代码DFSBFSLeetCode-559 题目简述 给定一个N叉树&#xff0c;找到其最大深度 最大深度是指从根节点到最远叶子节点的最长路径上的节点总数。 TreeNode代码 class Node {//值public int val;//孩子结点 使用List集合存储public List<Node> child…

springboot09 事务 H2数据库

一、事务 1. 事务介绍 事务可以包含多个操作步骤 &#xff0c; 如果有一个步骤失败&#xff0c;那么这一组都以失败告终。 事务是指包含多个微小逻辑单元的一组操作&#xff0c; 只要其中有一个逻辑失败了&#xff0c;那么这一组操作就全部以失败告终&#xff0c;不存在一半成功…

保护SQL Server数据库的十大绝招(转)

1. 安装最新的服务包    为了提高服务器安全性&#xff0c;最有效的一个方法就是升级到SQL Server 2000 Service Pack 3a (SP3a)。另外&#xff0c;您还应该安装所有已发布的安全更新。   2. 使用Microsoft基线安全性分析器&#xff08;MBSA&#xff09;来评估服务器的安全…

Java高并发程序设计(九)--ThreadLocal

如果说锁是让线程有序的争夺资源的话&#xff0c;那么ThreadLocal就是让每个线程都有一份资源。 打个比方&#xff0c;锁是让一百个人争夺一只笔区写字&#xff0c;ThreadLocal就是一百个人每人都有一只笔&#xff0c;在轮到他们写字的时候写。 写个简单的例子&#xff1a; pub…

关闭端口防止病毒与黑客入侵(转)

你的系统是不是1XP SP1&#xff0c;但是安装了2005瑞星杀毒软件后总是提示系统有 MS-4011 Exploit 和Blaster Rpc Exploit 两个漏洞。。。。。。。    最直接的办法&#xff0c;把系统不用的端口都关闭掉&#xff0c;然后从新启动&#xff0c;如果瑞星还提示有漏洞攻击&…

移动通信概要(转)

摘要&#xff1a;移动通信网在世纪之交正以前所未有的高速度发展。本文扼要探讨其现状与展望&#xff0c;简要介绍蜂窝移动通信网、卫星移动通信网和移动数据通信网的技术应用及其演进情况。关键词&#xff1b;移动通信 GSM CDMA卫星通信 CDPD GPRS一、引言当前全球移动通信正以…

实例解析:高效率网吧组网解决方案(转)

目前国内最为常见的网吧网络规模在100台电脑到400台电脑之间。考虑到此类网吧网络的建设已形成规模&#xff0c;中心选择高性能的全千兆交换机形成一个千兆的交换网络是十分必要的。同时考虑到为确保整个网络的高效率使用&#xff0c;全网配置提供丰富管理功能的可网管交换机也…