DBCP(DataBase connection pool)數(shù)據(jù)庫(kù)連接池。是Apache上的一個(gè) java連接池項(xiàng)目,也是 tomcat使用的連接池組件。單獨(dú)使用dbcp需要3個(gè)包:common-dbcp.jar,common-pool.jar,common-collections.jar由于建立數(shù)據(jù)庫(kù)連接是一個(gè)非常耗時(shí)耗資源的行為,所以通過(guò)連接池預(yù)先同數(shù)據(jù)庫(kù)建立一些連接,放在內(nèi)存中,應(yīng)用程序需要建立數(shù)據(jù)庫(kù)連接時(shí)直接到連接池中申請(qǐng)一個(gè)就行,用完后再放回去。dbcp沒(méi)有自動(dòng)的去回收空閑連接的功能。
目前創(chuàng)新互聯(lián)已為近1000家的企業(yè)提供了網(wǎng)站建設(shè)、域名、網(wǎng)站空間、網(wǎng)站運(yùn)營(yíng)、企業(yè)網(wǎng)站設(shè)計(jì)、羅城網(wǎng)站維護(hù)等服務(wù),公司將堅(jiān)持客戶導(dǎo)向、應(yīng)用為本的策略,正道將秉承"和諧、參與、激情"的文化,與客戶和合作伙伴齊心協(xié)力一起成長(zhǎng),共同發(fā)展。
java連接SqlServer2008的數(shù)據(jù)庫(kù)連接池使用:
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Vector;
/**數(shù)據(jù)庫(kù)連接池的公共類 **/
public class ConnectionPool {
private VectorConnection pool;//聲明集合,里面只能是放Connection
/**
* 聲明要的東西
*/
private String url = "jdbc:sqlserver://localhost:1433; database=ajax";
private String username = "sa";
private String password = "sa123";
private String driverClassName = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
/**
* 連接池的大小,也就是連接池中有多少個(gè)數(shù)據(jù)庫(kù)連接
*/
private int poolSize = 5;
private static ConnectionPool instance = null;
/**
* 私有的構(gòu)造方法,禁止外部創(chuàng)建本類的對(duì)象,要想獲得本類的對(duì)象,通過(guò)codegetIstance/code方法
* 使用了設(shè)計(jì)模式中的單子模式
*/
private ConnectionPool() {
init();
}
/**
* 連接池初始化方法,讀取屬性文件的內(nèi)容 建立連接池中的初始連
*/
private void init() {
pool = new VectorConnection(poolSize);
//readConfig();
addConnection();
}
/**
* 返回連接到連接池
*/
public synchronized void release(Connection conn) {
pool.add(conn);
}
/**
* 關(guān)閉連接池中的所有數(shù)據(jù)庫(kù)連接
*/
public synchronized void closePool() {
for (int i = 0; i pool.size(); i++) {
try {
((Connection) pool.get(i)).close();
} catch (SQLException e) {
e.printStackTrace();
}
pool.remove(i);
}
}
/**
* 返回當(dāng)前連接池的對(duì)象
*/
public static ConnectionPool getInstance() {
if (instance == null) {
instance = new ConnectionPool();
}
return instance;
}
/**
* 返回連接池中的一個(gè)數(shù)據(jù)庫(kù)連接
*/
public synchronized Connection getConnection() {
if (pool.size() 0) {
Connection conn = pool.get(0);
pool.remove(conn);
return conn;
} else {
return null;
}
}
/**
* 在連接池中創(chuàng)建初始設(shè)置的的數(shù)據(jù)庫(kù)連接
*/
private void addConnection() {
Connection conn = null;
for (int i = 0; i poolSize; i++) {
try {
Class.forName(driverClassName);
conn = java.sql.DriverManager.getConnection(url, username,
password);
pool.add(conn);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
請(qǐng)參考
首先配置:META-INF/context.xml:
?xml version="1.0" encoding="UTF-8"?
Context path="" reloadable="true" crossContext="true"
Resource name="jdbc/TestDB" auth="Container" type="javax.sql.DataSource"
maxActive="100" maxIdle="30" maxWait="10000" username="root" password="root"
driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://127.0.0.1:3306/db_name" /
/Context
再配置:WEB-INF/web.xml:在web-app元素下
resource-ref
descriptionDB Connection/description
res-ref-namejdbc/TestDB/res-ref-name
res-typejavax.sql.DataSource/res-type
res-authContainer/res-auth
/resource-ref
程序:
InitialContext ctx = new InitialContext();
Context envContext = (Context) ctx.lookup("java:comp/env");
DataSource ds = (DataSource) envContext.lookup("jdbc/TestDB");
Connection conn = ds.getConnection();
Statement stmt = conn.createStatement();
stmt.execute(“執(zhí)行的SQL語(yǔ)句”);
stmt.close();
conn.close();
應(yīng)該是Connection對(duì)象沒(méi)有Close造成的,導(dǎo)致它沒(méi)有回到連接池里去。
檢查一下代碼,要么忘寫了,要么是異?;蛱崆胺祷貙?dǎo)致沒(méi)有執(zhí)行Close
網(wǎng)站欄目:sqlserver鏈接池,sqlserver連接池
地址分享:http://jinyejixie.com/article42/dsechec.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、全網(wǎng)營(yíng)銷推廣、響應(yīng)式網(wǎng)站、域名注冊(cè)、網(wǎng)站建設(shè)、網(wǎng)站內(nèi)鏈
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)