数据库: java使用Druid连接池连接MySQL数据库

<p><iframe name="ifd" src="https://mnifdv.cn/resource/cnblogs/LearnMysql" frameborder="0" scrolling="auto" width="100%" height="1500"></iframe></p>

 

Druid

Druid连接池是阿里巴巴开源的数据库连接池项目.

https://github.com/alibaba/druid/wiki/Druid%E8%BF%9E%E6%8E%A5%E6%B1%A0%E4%BB%8B%E7%BB%8D

 

为啥要用连接池

1.数据库本身也是个TCP服务器,客户端和数据库通信首先需要先连接TCP服务器

然后再根据数据库的协议连接上数据库.

服务器回复 "Response OK" 的消息体就说明连接上了.

 

 

 

2.现在有两个问题需要解决:很多用户连接通信的问题 ,和需要快速操作数据的问题

实际上连接数据库的客户端的个数是有限的;

如果有200个用户同时都建立链接,那么有一部分用户就连接不上了.

用户可以用命令看一下 show variables like '%max_connections%';

 

 

 

 

 

咱每次操作数据库的时候都需要连接的步骤,这个步骤每次都有延迟!!体验一点不好!

 

 

3.解决以上问题的最好方式是加一个对外的接口和一个连接池

 

 

对外接口的作用是拿到数据以后调用数据库连接池,然后由连接池和数据库通信.

 

数据库连接池其实就是提前预先建立了多个数据库连接对象;

假设建立了20个和数据库的连接.

 

 

4.连接池的作用

连接池里面的的客户端都是早已和数据库连接着的,当需要和数据库通信的时候

就从里面取出一个来客户端,然后发数据通信.省去了连接数据库的过程,提高了效率!

如果请求非常多,那么最多也就只有20个连接.不会造成因为连接个数过多而导致数据库性能下降!

注:有些用户会想,这不是也有问题嘛!才20个! 接着往下看!

连接池的作用就是省去了连接数据库的过程,提高了数据通信速度.

防止过多的连接和数据库相连而导致数据库性能下降!

 

5.接口的作用

在网络通信中,这个接口一般是 http接口,当然也可以是TCP接口,mqtt接口,WebSocket接口等;以下皆说为 接口

接口的作用一部分是为了接受客户过来的数据,另一部分就是缓存用户过来的数据.

然后呢就是不停的到数据库连接池里面去拿连接对象,然后和数据库进行交互!

然后有人会问?解决了20个问题了没??

 

可以说解决了99%了.

大家要明确一个事情,看似数据被缓存了不假 ,但是网络通信的速度是非常快的,其实上百个乃至上千个用户访问数据

他们不会感受到的.

剩下的1%其实就是应对极端情况,上百万,千万的人...

 

内部处理思路还是上面那个样子,但是呢为了应对这种极端情况就要采取下面的措施

1.优化代码,提高代码的执行效率

2.多开几台服务器

 

 

Druid连接池使用

Druid其实是对连接数据库的对象进行管理,所以咱也需要连接数据库的jar包(JDBC).

因为5.X的MySQL数据库和8.X的MySQL数据库的连接jar包不一样了,所以我提供了两份程序.

注:两份程序的Druid的jar包是一样的,只是连接MySQL数据库jar不一样

 

 

 

 

 

先看连接8.X的数据库(运行可能报错,请往下面看)

1.导入jar包什么的自己导入,我用的软件是 intellij idea

 

 

 

2.数据库

 

 

 

3.我只写了插入一个数据的程序

package com.company;

import com.alibaba.druid.pool.DruidDataSource;

import java.sql.Connection;
import java.sql.PreparedStatement;

public class Main {
    /*声明Druid连接池的对象*/
    private static DruidDataSource dataSource;
    /*8.X版本连接器写法*/
    static final String JDBC_DRIVER = "com.mysql.cj.jdbc.Driver";
    /*数据库地址*/
    static final String DB_URL = "jdbc:mysql://localhost/userinfo?" +
            "useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT";
    public static void main(String[] args) {

        initDataSource();// 初始化连接池
        try{//插入一个数据
            String sql = "insert into userinfo (username,password)"+ "values(" +"'"+ "yangyang" +"'"+ "," +"'"+"11111111"+"'"+")";
            Connection connection = getConnect();//在连接池里面获取连接对象
            PreparedStatement ps = connection.prepareStatement(sql);//预编译下SQL语句
            int count = ps.executeUpdate();//提交SQL语句
            System.out.println(count);//打印受影响的行数(不为0说明执行了!)
        }catch (Exception e){
            System.out.println(e.toString());
        }
    }

    // 初始化连接池
    private static void initDataSource() {
        try {
            dataSource = new DruidDataSource(); // 创建Druid连接池
            dataSource.setDriverClassName(JDBC_DRIVER); // 设置连接池的数据库驱动
            dataSource.setUrl(DB_URL); // 设置数据库的连接地址
            dataSource.setUsername("iot"); // 数据库的用户名
            dataSource.setPassword("11223344."); // 数据库的密码
            dataSource.setInitialSize(1); // 设置连接池的初始大小
            dataSource.setMinIdle(1); // 设置连接池大小的下限
            dataSource.setMaxActive(20); // 设置连接池大小的上限
        }catch (Exception e){
            System.out.println(e.toString());
        }
    }
    //从连接池里面获取一个连接对象
    public static Connection getConnect() throws Exception{
        Connection con=null;
        try {
            con=dataSource.getConnection();
        } catch (Exception e) {
            throw e;
        }
        return con;
    }
}

 

4.运行以后

 

 

 

 

 

 

 

5.提示:8.0的需要JDK1.8版本的,如果你的jar包是1.8以下版本的将会报错

用户可以安装上1.8版本的jar包,

注意只安装上,不用配置环境变量!

注意只安装上,不用配置环境变量!

注意只安装上,不用配置环境变量!

 

然后设置下软件使用的jdk (根据自己的软件百度下设置JDK)

其实就是选择下JDK的安装路径(根据自己的软件百度)

 

 

 

选择要使用的JDK版本

 

 

 

 

 

 

 

现在看连接5.X的数据库

1.把jar包换了

 

 

2.JDK选择的 1.7

 

 

 

 

 

 

 

3.驱动器名字改为了

 

 

 

 

4.运行测试

 

 

 

 

posted on 2020-10-06 05:20  广源时代  阅读(4579)  评论(0编辑  收藏  举报

导航

支付宝 QQ群