數據庫: 使用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.運行測試

 

 

 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM