内射老阿姨1区2区3区4区_久久精品人人做人人爽电影蜜月_久久国产精品亚洲77777_99精品又大又爽又粗少妇毛片

Java用連接池連接數(shù)據(jù)庫(kù)的方法

本篇文章展示了Java用連接池連接數(shù)據(jù)庫(kù)的方法具體操作,代碼簡(jiǎn)明扼要容易理解,絕對(duì)能讓你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。

創(chuàng)新互聯(lián)公司是一家專(zhuān)業(yè)提供昆山企業(yè)網(wǎng)站建設(shè),專(zhuān)注與成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、html5、小程序制作等業(yè)務(wù)。10年已為昆山眾多企業(yè)、政府機(jī)構(gòu)等服務(wù)。創(chuàng)新互聯(lián)專(zhuān)業(yè)的建站公司優(yōu)惠進(jìn)行中。

傳統(tǒng)方式和連接池方式

傳統(tǒng)方式的步驟

使用傳統(tǒng)方式在Java中使用JDBC連接數(shù)據(jù)庫(kù),完成一次數(shù)據(jù)庫(kù)的操作,一般有以下幾個(gè)步驟:

1. 加載驅(qū)動(dòng)。

2. 建立連接。

3. 執(zhí)行SQL語(yǔ)句。

4. 釋放連接。

5. 傳統(tǒng)方式的弊端

每一次對(duì)數(shù)據(jù)庫(kù)的操作都要建立一次連接,并且會(huì)將得到的Connection對(duì)象加載到內(nèi)存中,導(dǎo)致消耗了大量的內(nèi)存和時(shí)間。如果短時(shí)間有很多需要進(jìn)行建立連接的操作,會(huì)導(dǎo)致占用很多系統(tǒng)資源,甚至?xí)?dǎo)致服務(wù)器崩潰。

同建立連接相對(duì)應(yīng),每次使用都需要手動(dòng)釋放連接,如果忘記釋放連接或者程序出現(xiàn)異常未能成功釋放,會(huì)導(dǎo)致內(nèi)存泄露。

此外,傳統(tǒng)方式并不能控制連接的數(shù)量,如果連接的人數(shù)過(guò)多,會(huì)導(dǎo)致無(wú)限制的創(chuàng)建連接對(duì)象,導(dǎo)致內(nèi)存開(kāi)銷(xiāo)過(guò)大,服務(wù)器崩潰。

連接池的步驟

1. 創(chuàng)建連接池并配置連接屬性。

2. 使用連接池獲取連接。

連接池的優(yōu)勢(shì)

每次需要連接數(shù)據(jù)庫(kù)時(shí),不需要建立連接,而是通過(guò)連接池獲取,由連接池提供連接。

在使用完連接后,不需要手動(dòng)釋放連接,而是交由連接池釋放連接。

可以通過(guò)連接池控制連接的數(shù)量,在連接池里的連接可多次重復(fù)使用,避免了無(wú)限制創(chuàng)建連接的問(wèn)題。

使用連接池

使用C3P0數(shù)據(jù)庫(kù)連接池

導(dǎo)入jar包:

c3p0-0.9.5.2.jar

在當(dāng)前項(xiàng)目的代碼根目錄 src 下新建名為 c3p0-config.xml 的配置文件,注意文件名稱(chēng)不可改變,內(nèi)容如下:

<c3p0-config>
    <!-- 連接名稱(chēng) -->
    <named-config name="MySQL">
        <!-- 接數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類(lèi)名 -->
        <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>
        <!-- 當(dāng)連接池用完時(shí)等待獲取新連接的時(shí)間,超時(shí)后將拋出SQLException,單位毫秒,如設(shè)為0則無(wú)限期等待。默認(rèn)為0。 -->
        <property name="checkoutTimeout">5000</property>
        <!-- 當(dāng)連接用盡后,一次獲取的連接個(gè)數(shù) -->
        <property name="acquireIncrement">2</property>
        <!-- 初始連接數(shù) -->
        <property name="initialPoolSize">1</property>
        <!-- 最小連接數(shù) -->
        <property name="minPoolSize">3</property>
        <!-- 最大連接數(shù) -->
        <property name="maxPoolSize">5</property>
    </named-config>
</c3p0-config>

程序代碼:

public class TestDataPool {
    // 根據(jù)配置文件里的名稱(chēng)創(chuàng)建連接池
    public static ComboPooledDataSource cpds = new ComboPooledDataSource("mysql");
    
    /**
     * 主程序
     */
    public static void main(String[] args) {
        // 模擬多次對(duì)數(shù)據(jù)庫(kù)的查詢(xún)操作
        for (int i = 0; i < 6; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    select();
                }
            }, "線(xiàn)程" + i).start();
        }
    }
    
    /**
     * 查詢(xún)程序
     */
    public static void select() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        // 獲取連接并執(zhí)行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數(shù)據(jù)庫(kù)連接池

導(dǎo)入jar包:

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

在當(dāng)前項(xiàng)目的代碼根目錄 src 下新建名為 dbcp.properties 的配置文件,文件名需要同代碼中引用的文件名一致,內(nèi)容如下:

# 接數(shù)據(jù)庫(kù)的驅(qū)動(dòng)類(lèi)名
driverClassName=com.mysql.jdbc.Driver
# 連接屬性
url=jdbc:mysql://192.168.35.128:3306/demo
username=root
password=123456
# 初始化連接數(shù)
initialSize=10
# 最大連接數(shù)
maxActive=15

程序代碼:

public class TestDBCP {
    // 根據(jù)配置文件里的名稱(chēng)創(chuàng)建連接池
    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) {
        // 模擬多次對(duì)數(shù)據(jù)庫(kù)的查詢(xún)操作
        for (int i = 0; i < 6; i++) {
            new Thread(new Runnable() {
                @Override
                public void run() {
                    select();
                }
            }, "線(xiàn)程" + i).start();
        }
    }

    /**
     * 查詢(xún)程序
     */
    public static void select() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        // 獲取連接并執(zhí)行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();
            }
        }
    }
}

看完上述內(nèi)容,你們掌握J(rèn)ava用連接池連接數(shù)據(jù)庫(kù)的方法了嗎?如果還想學(xué)到更多技能或想了解更多相關(guān)內(nèi)容,歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道,感謝各位的閱讀!

文章標(biāo)題:Java用連接池連接數(shù)據(jù)庫(kù)的方法
網(wǎng)站地址:http://m.rwnh.cn/article38/igjgsp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、用戶(hù)體驗(yàn)、網(wǎng)站策劃網(wǎng)站維護(hù)、網(wǎng)頁(yè)設(shè)計(jì)公司品牌網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀(guān)點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

微信小程序開(kāi)發(fā)
南澳县| 合川市| 株洲县| 清苑县| 自贡市| 衡阳县| 秦皇岛市| 东港市| 临海市| 广饶县| 商丘市| 阿勒泰市| 蛟河市| 怀化市| 思南县| 东乡族自治县| 偃师市| 彩票| 宿迁市| 曲周县| 石屏县| 方山县| 六安市| 金湖县| 鲜城| 洮南市| 丹江口市| 万年县| 陕西省| 西华县| 光泽县| 石首市| 五台县| 新建县| 宜兰县| 湟源县| 阿拉尔市| 石林| 台安县| 扬州市| 台中县|