首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

用 Java 程式測試 MySQL 最大連線數:JDBC 壓測代碼範例

     編輯:MySQL 資料庫相關知識

背景

早期 Oracle 8i 常遇 ORA-12500 最大連線錯誤,編寫 JDBC 測試程式驗證極限。現改為 MySQL 版本,供參考。

完整測試代碼

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.io.IOException;

public class TestMaxConn {
    public static void main(String args[]) {
        int count = 0;
        Connection[] conn = new Connection[1000];
        Statement[] stmt = new Statement[1000];
        ResultSet[] rs = new ResultSet[1000];

        try {
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            for (count = 0; count < 300; count++) {
                conn[count] = DriverManager.getConnection(
                    "jdbc:mysql://localhost/mysql", "root", "");
                stmt[count] = conn[count].createStatement();
                rs[count] = stmt[count].executeQuery("SELECT * FROM user");
                while (rs[count].next()) {
                    // System.out.println(rs.getString(1) + "\t" + rs.getString(2));
                }
                System.out.print(count + "\t");
            }
        } catch (SQLException ex1) {
            System.out.println("\n" + ex1.toString());
        } catch (InstantiationException ex2) {
            System.out.println("\n" + ex2.toString());
        } catch (ClassNotFoundException ex3) {
            System.out.println("\n" + ex3.toString());
        } catch (IllegalAccessException ex4) {
            System.out.println("\n" + ex4.toString());
        } finally {
            try {
                System.out.println("\nSystem has opened " + count-- + " MySQL connections.\nPress Enter key to close the connections");
                System.in.read();
                System.out.println("\nClose the Connections:");
                for (; count >= 0; count--) {
                    rs[count].close();
                    stmt[count].close();
                    conn[count].close();
                    System.out.print(count + "\t");
                }
            } catch (SQLException ex) {
                System.out.println("\n Close connection exception:" + ex.toString());
            } catch (IOException io_ex) {}
        }
    }
}

關鍵點說明

  • 陣列大小 1000,迴圈上限 300,可依機器調整。
  • 捕獲 SQLException 即為達到最大連線限制(或其他錯誤)。
  • finally 區塊等待按鍵後依序關閉所有連線,釋放資源。
  • 驅動類別名稱:com.mysql.jdbc.Driver(MySQL Connector/J 5.1+;8.0+ 為 com.mysql.cj.jdbc.Driver)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved