搜尋
首頁JavaJava基礎Java操作資料庫-使用連線池連接資料庫

Java操作資料庫-使用連線池連接資料庫

傳統方式和連接池方式

傳統方式的步驟

使用傳統方式在Java中使用JDBC連接資料庫,完成一次資料庫的操作,一般有以下步驟:

1. 載入驅動程式。

2. 建立連線。

3. 執行SQL語句。

4. 釋放連線。

5. 傳統方式的弊端

每一次對資料庫的操作都要建立一次連接,並且會將得到的Connection物件載入到記憶體中,導致消耗了大量的記憶體和時間。如果短時間有很多需要建立連線的操作,會導致佔用很多系統資源,甚至會導致伺服器崩潰。

同建立連接相對應,每次使用都需要手動釋放連接,如果忘記釋放連接或程式出現異常未能成功釋放,會導致記憶體外洩。

此外,傳統方式並不能控制連線的數量,如果連線的人數過多,會導致無限制的建立連線對象,導致記憶體開銷過大,伺服器崩潰。

(推薦影片:java影片教學

連接池的步驟

1. 建立連線池並設定連接屬性。

2. 使用連線池取得連線。

連接池的優勢

每次需要連接資料庫時,不需要建立連接,而是透過連接池獲取,由連接池提供連接。

使用完連接後,不需要手動釋放連接,而是交由連接池釋放連接。

可以透過連線池控制連線的數量,在連線池裡的連線可重複使用,避免了無限制建立連線的問題。

使用連接池

使用C3P0資料庫連接池

匯入jar套件:

c3p0-0.9.5.2.jar

在目前專案的程式碼根目錄src 下新建名為 c3p0-config.xml 的設定文件,注意檔案名稱無法改變,內容如下:

<c3p0-config>
    <!-- 连接名称 -->
    <named-config name="mysql">
        <!-- 接数据库的驱动类名 -->
        <property name="driverClass">com.mysql.jdbc.Driver</property>
        <!-- 连接属性 -->
        <property name="jdbcUrl">jdbc:mysql://192.168.35.128:3306/demo</property>
        <property name="user">root</property>
        <property name="password">123456</property>
        <!-- 当连接池用完时等待获取新连接的时间,超时后将抛出SQLException,单位毫秒,如设为0则无限期等待。默认为0。 -->
        <property name="checkoutTimeout">5000</property>
        <!-- 当连接用尽后,一次获取的连接个数 -->
        <property name="acquireIncrement">2</property>
        <!-- 初始连接数 -->
        <property name="initialPoolSize">1</property>
        <!-- 最小连接数 -->
        <property name="minPoolSize">3</property>
        <!-- 最大连接数 -->
        <property name="maxPoolSize">5</property>
    </named-config>
</c3p0-config>

程式碼:

public class TestDataPool {
    // 根据配置文件里的名称创建连接池
    public static ComboPooledDataSource cpds = new ComboPooledDataSource("mysql");
    
    /**
     * 主程序
     */
    public static void main(String[] args) {
        // 模拟多次对数据库的查询操作
        for (int i = 0; i < 6; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    select();
                }
            }, "线程" + i).start();
        }
    }
    
    /**
     * 查询程序
     */
    public static void select() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        // 获取连接并执行SQL
        try {
            conn = cpds.getConnection();
            pstmt = conn.prepareStatement("select * from student where id = 906");
            rs = pstmt.executeQuery();
            while (rs.next()) {
                System.out.println(Thread.currentThread().getName() + "\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString("address"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

使用DBCP資料庫連線池

匯入jar包:

 commons-dbcp-1.4.jar2 commons-pool-1.5.5.jar

在目前專案的程式碼根目錄 src 下新建名為 dbcp.properties 的設定文件,檔案名稱需要同程式碼中引用的檔案名稱一致,內容如下:

# 接数据库的驱动类名
driverClassName=com.mysql.jdbc.Driver
# 连接属性
url=jdbc:mysql://192.168.35.128:3306/demo
username=root
password=123456
# 初始化连接数
initialSize=10
# 最大连接数
maxActive=15

程式碼:

public class TestDBCP {
    // 根据配置文件里的名称创建连接池
    private static DataSource source = null;
    static {
        Properties pros = new Properties();
        InputStream is = TestDBCP.class.getClassLoader().getResourceAsStream("dbcp.properties");
        try {
            pros.load(is);
            source = BasicDataSourceFactory.createDataSource(pros);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 主程序
     */
    public static void main(String[] args) {
        // 模拟多次对数据库的查询操作
        for (int i = 0; i < 6; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    select();
                }
            }, "线程" + i).start();
        }
    }

    /**
     * 查询程序
     */
    public static void select() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        // 获取连接并执行SQL
        try {
            conn = source.getConnection();
            pstmt = conn.prepareStatement("select * from student where id = 906");
            rs = pstmt.executeQuery();
            while (rs.next()) {
                System.out.println(Thread.currentThread().getName() + "\t" + rs.getString(1) + "\t" + rs.getString(2) + "\t" + rs.getString("address"));
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            // 释放资源
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                pstmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

以上是Java操作資料庫-使用連線池連接資料庫的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:博客园。如有侵權,請聯絡admin@php.cn刪除

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

VSCode Windows 64位元 下載

VSCode Windows 64位元 下載

微軟推出的免費、功能強大的一款IDE編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)