資料庫連線池的好處:
對於乙個簡單的資料庫應用,由於對於資料庫的訪問不是很頻繁。這時可以簡單地在需要訪問資料庫時,就新建立乙個連線,用完後就關閉它,這樣做也不會帶來什麼明顯的效能上的開銷。但是對於乙個複雜的資料庫應用,頻繁的建立、關閉連線,會極大的降低系統的效能,因為資料庫的連線是非常耗時的操作,所以可能對於資料庫連線就成了系統效能的瓶頸。
此處,編寫乙個簡單的資料庫連線池,理解資料庫連線池的實現思想。
資料庫連線池的編寫分析設計:
參考:
/*
* 資料庫連線池的配置檔案
*/public class paramconfig
# .properties檔案,#代表注釋
#對於mysql的字段
mysql.driver=com.mysql.jdbc.driver
mysql.url=jdbc:mysql://localhost:3306/test?usessl=true&rewritebatchedstatements=true
mysql.user_name=root
mysql.user_pwd=123456
#oracle的字段
oracle.driver=
oracle.url=
oracle.user_name=
oracle.user_pwd=
dbhandler介面儲存dbconfig.properties的key值:
public inte***ce dbhandler
資料庫連線池的封裝:
/*
* 資料庫連線池
*/public class dbconnpool implements datasource catch (ioexception e)
driver=getvalue(dbhandler.driver);
url=getvalue(dbhandler.url);
user_name=getvalue(dbhandler.user_name);
user_pwd=getvalue(dbhandler.user_pwd);
}private static final int default_init_size=5;//連線池預設連線數
private static arrayblockingqueueidleconnqueue;//空閒連線佇列
private static vectorbusyconnvector; //正在被使用的資料庫連線集合
private static logger logger=null;
private int size;//空閒連線數
private static dbconnpool dbconnpool=null;//使用單例模式
private dbconnpool()
/* * 提供給外界獲取此類物件的方法
*/public static dbconnpool getinstance()
return dbconnpool;
} /*
* 初始化資料庫連線池
*/private void initconnpool() catch (interruptedexception e) catch (sqlexception e)
}} /*
* 獲取空閒佇列的大小
*/protected int getidleconnqueuesize()
/*** 獲取正在使用的連線的數量
* @return
*/protected int getbusyconnvectorsize()
private string entrymsg()
@override
public connection getconnection(string username, string password) throws sqlexception
@override
public printwriter getlogwriter() throws sqlexception
@override
public void setlogwriter(printwriter out) throws sqlexception
@override
public void setlogintimeout(int seconds) throws sqlexception
@override
public int getlogintimeout() throws sqlexception
@override
public logger getparentlogger() throws sqlfeaturenotsupportedexception
@override
public t unwrap(classiface) throws sqlexception
@override
// todo auto-generated method stub
return false;
}}
資料庫連線池的管理類:
public class dbconnpoolmanage
}
測試類:
public class test
} catch (sqlexception e) finally
if(stmt!=null)
if(rs!=null)
} catch (sqlexception e)
} }}
分析總結:核心**:
public connection getconnection() throws sqlexception
busyconnvector.add(conn);
return (connection) proxy.newproxyinstance(this.getclass().getclassloader(), new class, new invocationhandler() else
}});
} catch (interruptedexception e)
return null;
}
getconnection返回的並不是「真正」的connection,而是**類(此處使用匿名類),當使用者呼叫close()方法時,不是對connection進行close操作,而是將此connection放回idleconnqueue佇列中,從busyconnvector中移除。 資料庫連線池(簡易)
手寫乙個資料庫連線池,如下 1 jdbc獲取鏈結 public class connectionresource catch sqlexception e public connection getconnection public void close catch sqlexception e 2...
Java連線資料庫
1 oracle8 8i 9i資料庫 用thin模式 class.forname oracle.jdbc.driver.oracledriver newinstance string url jdbc oracle thin localhost 1521 orcl 2 sql server7.0 2...
Java連線MySQL資料庫
廢話不多說,直接上 記得在用eclipse建立專案後,要匯入jdbc。首先建立乙個databaseconnection類,用來連線資料庫。public class databaseconnection catch exception e public connection getconnectin ...