免费视频淫片aa毛片_日韩高清在线亚洲专区vr_日韩大片免费观看视频播放_亚洲欧美国产精品完整版

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費(fèi)電子書等14項(xiàng)超值服

開(kāi)通VIP
JDBC數(shù)據(jù)源(DataSource)的簡(jiǎn)單實(shí)現(xiàn)
數(shù)據(jù)源技術(shù)是Java操作數(shù)據(jù)庫(kù)的一個(gè)很關(guān)鍵技術(shù),流行的持久化框架都離不開(kāi)數(shù)據(jù)源的應(yīng)用。
 
數(shù)據(jù)源提供了一種簡(jiǎn)單獲取數(shù)據(jù)庫(kù)連接的方式,并能在內(nèi)部通過(guò)一個(gè)池的機(jī)制來(lái)復(fù)用數(shù)據(jù)庫(kù)連接,這樣就大大減少創(chuàng)建數(shù)據(jù)庫(kù)連接的次數(shù),提高了系統(tǒng)性能。
 
對(duì)于數(shù)據(jù)源的應(yīng)用,一般都選擇實(shí)用開(kāi)源的數(shù)據(jù)源或數(shù)據(jù)庫(kù)連接池來(lái)使用,比如,常見(jiàn)的有DBCP、C3P0、Proxool等等。但用起來(lái)有些笨重和麻煩。下面自己手動(dòng)實(shí)現(xiàn)個(gè)精簡(jiǎn)的數(shù)據(jù)源,代碼如下:
 
package com.lavasoft.simpledatesource;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

import javax.sql.DataSource;
import java.util.Collections;
import java.util.LinkedList;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.io.PrintWriter;

/**
* 一個(gè)簡(jiǎn)單的DataSource實(shí)現(xiàn)
*
* @author leizhimin 2010-1-14 0:03:17
*/

public class SimpleDateSource implements DataSource {
        private static Log log = LogFactory.getLog(SimpleDateSource.class);
        private static final String dirverClassName = "com.mysql.jdbc.Driver";
        private static final String url = "jdbc:mysql://127.0.0.1:3306/testdb";
        private static final String user = "root";
        private static final String pswd = "leizhimin";
        //連接池
        private static LinkedList<Connection> pool = (LinkedList<Connection>) Collections.synchronizedList(new LinkedList<Connection>());
        private static SimpleDateSource instance = new SimpleDateSource();

        static {
                try {
                        Class.forName(dirverClassName);
                } catch (ClassNotFoundException e) {
                        log.error("找不到驅(qū)動(dòng)類!", e);
                }
        }

        private SimpleDateSource() {
        }

        /**
         * 獲取數(shù)據(jù)源單例
         *
         * @return 數(shù)據(jù)源單例
         */

        public SimpleDateSource instance() {
                if (instance == null) instance = new SimpleDateSource();
                return instance;
        }

        /**
         * 獲取一個(gè)數(shù)據(jù)庫(kù)連接
         *
         * @return 一個(gè)數(shù)據(jù)庫(kù)連接
         * @throws SQLException
         */

        public Connection getConnection() throws SQLException {
                synchronized (pool) {
                        if (pool.size() > 0) return pool.removeFirst();
                        else return makeConnection();
                }
        }

        /**
         * 連接歸池
         *
         * @param conn
         */

        public static void freeConnection(Connection conn) {
                pool.addLast(conn);
        }

        private Connection makeConnection() throws SQLException {
                return DriverManager.getConnection(url, user, pswd);
        }

        public Connection getConnection(String username, String password) throws SQLException {
                return DriverManager.getConnection(url, username, password);
        }

        public PrintWriter getLogWriter() throws SQLException {
                return null;
        }

        public void setLogWriter(PrintWriter out) throws SQLException {

        }

        public void setLoginTimeout(int seconds) throws SQLException {

        }

        public int getLoginTimeout() throws SQLException {
                return 0;
        }

        public <T> T unwrap(Class<T> iface) throws SQLException {
                return null;
        }

        public boolean isWrapperFor(Class<?> iface) throws SQLException {
                return false;
        }
}
 
這個(gè)數(shù)據(jù)源的實(shí)現(xiàn)雖然很簡(jiǎn)陋,總代碼量不到百行,卻基本上實(shí)現(xiàn)了數(shù)據(jù)源的所有功能,達(dá)到了提高Connection復(fù)用的目的。
 
如果你想做的更復(fù)雜些,做個(gè)配置文件,
配置數(shù)據(jù)庫(kù)連接信息
寫個(gè)后臺(tái)線程監(jiān)控連接池的Connection超時(shí)、被強(qiáng)制關(guān)閉、池的尺寸、當(dāng)前大小等等。
再完善下數(shù)據(jù)源的log相關(guān)方法的實(shí)現(xiàn)。
功能就很強(qiáng)大了。
本站僅提供存儲(chǔ)服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊舉報(bào)。
打開(kāi)APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
自己做數(shù)據(jù)庫(kù)連接池(c3p0)
Jdbc 實(shí)現(xiàn)分頁(yè)
四種連接數(shù)據(jù)庫(kù)的方法(DriverManager、DataSource子類、DBCP、c3...
數(shù)據(jù)庫(kù)連接JDBC連接池組件C3P0的使用方法
組合spring jdbc 實(shí)現(xiàn)分表分庫(kù)的數(shù)據(jù)庫(kù)
Spring的事務(wù)管理入門:編程式事務(wù)管理(TransactionTemplate)
更多類似文章 >>
生活服務(wù)
分享 收藏 導(dǎo)長(zhǎng)圖 關(guān)注 下載文章
綁定賬號(hào)成功
后續(xù)可登錄賬號(hào)暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服