JDBC-数据库连接池(Druid)的使用

一、德鲁伊(Druid)连接池的优势

1.Druid连接池是阿里巴巴开源的数据库连接池项目。Druid连接池为监控而生,内置强大的监控功能,监控特性不影响性能。功能强大,能防SQL注入,内置Loging能诊断Hack应用行为。
2.Druid连接池是[阿里巴巴内部唯一使用的连接池],在内部数据库相关中间件TDDL/DRDS 都内置使用强依赖了Druid
连接池,经过阿里内部数千上万的系统大规模验证,[经过历年双十一超大规模并发验证]。
3.它有贴心的错误提示——当连接不够用时,申请链接超时报错,Druid连接池能够报错会告诉你当前RunningSQL
有哪些,当前连接池的水平信息。通过错误日志很方便知道系统瓶颈在哪里。
4.Druid连接池最初就是为监控系统采集jdbc运行信息而生的,它内置了StatFilter 功能,能采集非常完备的连接
池执行信息Druid连接池内置了能和Spring/Servlet关联监控的实现,使得监控Web应用特别方便Druid连接池内置了一个监控页面,提供了非常完备的监控信息,可以快速诊断系统的瓶颈。
5. 监控不影响性能——Druid增加StatFilter之后,能采集大量统计信息,同时对性能基本没有影响。StatFilter对CPU和内存的消耗都极小,对系统的影响可以忽略不计。监控不影响性能是Druid连接池的重要特性。
6. SQL参数化合并监控——实际业务中,如果SQL不是走PreparedStatement,SQL没有参数化,这时SQL需要参数化
合并监控才能真实反映业务情况。如下SQL:
select * from t where id = 1
select * from t where id = 2
select * from t where id = 3
参数化后:
select * from t where id = ?
参数化合并监控是基于SQL Parser语法解析实现的,是Druid连接池独一无二的功能。
7.执行次数、返回行数、更新行数和并发监控——StatFilter能采集到每个SQL的执行次数、返回行数总和、更新
行数总和、执行中次数和和最大并发。并发监控的统计是在SQL执行开始对计数器加一,结束后对计数器减一实现
的。可以采集到每个SQL的当前并发和采集期间的最大并发。
8.防SQL注入
SQL注入攻击是黑客对数据库进行攻击的常用手段,Druid连接池内置了WallFilter 提供防SQL注入功能,在不影响性能的同时防御SQL注入攻击。
8.1 基于语意的防SQL注入
Druid连接池内置了一个功能完备的SQL Parser,能够完整解析mysql、sql server、oracle、postgresql的语法,
通过语意分析能够精确识别SQL注入攻击。
8.2 极低的漏报率和误报率
基于SQL语意分析,大量应用和反馈,使得Druid的防SQL注入拥有极低的漏报率和误报率。
8.3 防注入对性能影响极小
内置参数化后的Cache、高性能手写的Parser,使得打开防SQL注入对应用的性能基本不受影响。

二、如何使用德鲁伊连接池

通过Druid配置文件使用:
1. 创建lib目录,导入Druid的jar 包,并把jar包添加到项目库(右键lib目录->Add as Library->ok)
2. 创建一个名为druid.properties的文件(配置文件看第三点),拷贝配置文件到src目录
3. 根据配置文件创建Druid连接池对象
4. 从Druid连接池对象获得Connection

相关jar包链接:https://pan.baidu.com/s/1gyoVTIseRT02A0tEdhabHg?pwd=vznt 
提取码:vznt

三、配置文件

配置文件名:druid.properties
# 数据库连接参数
url=jdbc:mysql://localhost:3306/[这里输入数据库文件名路径]
username=[这里输入数据库用户名]
password=[这里输入数据库密码]
driverClassName=com.mysql.jdbc.Driver//驱动
# 连接池的参数
initialSize=10//初始化连接数
maxActive=10//最大最大活动连接数
maxWait=2000//最大等待时间

四、使用德鲁伊:druid底层是使用的工厂设计模式,去加载配置文件

import com.alibaba.druid.pool.DruidDataSourceFactory;

import javax.sql.DataSource;
import java.io.IOException;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

public class JDBCUtils {
    //定义成员变量DataSource
    private static DataSource ds;

    static {
        //加载配置文件
        Properties pro = new Properties();
        try {
            pro.load(JDBCUtils.class.getClassLoader().getResourceAsStream("druid.properties"));
            //获取Datasource
            ds = DruidDataSourceFactory.createDataSource(pro);

        } catch (IOException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

    public static Connection getConnection() throws SQLException {
        return ds.getConnection();
    }

    public static void close(ResultSet rs,Statement stmt, Connection conn) throws SQLException {
        if (stmt != null) {
            stmt.close();

        }
        if (conn != null) {
            conn.close();

        }
        if (rs != null) {
            rs.close();

        }
    }
public static DataSource getDataSource(){
        return ds;
}

}

五、准备一张数据库表

 六、创建jdbcTemplateDemo类修改数据库

import org.springframework.jdbc.core.JdbcTemplate;

public class jdbcTemplateDemo {
    public static void main(String[] args) {
        JdbcTemplate template=new JdbcTemplate(JDBCUtils.getDataSource());
        String sql="update dept set loc='南昌' where deptno =? ";
        int count = template.update(sql, 40);
        System.out.println(count);
    }
}

七、运行Java程序,修改数据库表

可以看到,数据库表修改成功! 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值