jdbc 自己理解
來源:程序員人生 發(fā)布時(shí)間:2015-04-30 08:20:48 閱讀次數(shù):3039次
1、connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ZSORA10G", "gao", "admin");
如果代碼里面始終就只有1個(gè)connection,是不是可以寫jdbc代碼 可以!
但是會(huì)造成以下問題:例如有兩個(gè)客戶端訪問數(shù)據(jù)庫(kù),同享1個(gè)connection ,如果其中1個(gè) 回滾了,那末第2個(gè)固然也回滾了,
所以在web項(xiàng)目中 都是 1個(gè)客戶端 1個(gè)connection 。這樣會(huì)致使 每次獲得連接 都要初始化獲得connection對(duì)象,這是非常消耗內(nèi)存的
這就是為何我們使用連接池,連接池里面初始化幾個(gè) 連接,不夠用的時(shí)候 就繼續(xù)增加,不用的時(shí)候 再燒毀點(diǎn),連接池里面始終
保存固定的connection。
關(guān)于connection.close的理解。 如果是 1個(gè)客戶端1個(gè)connection ,那末使用以后肯定要關(guān)掉連接 connection.close。不然容易內(nèi)存溢出
關(guān)于連接池的 調(diào)用關(guān)閉connection方法 不是立即就關(guān)閉,而是讓對(duì)象回歸到連接池里面。
這些大于最小連接數(shù)的數(shù)據(jù)庫(kù)連接在使用完不會(huì)馬上被釋放,它將被放到連接池中等待重復(fù)使用或是空閑超時(shí)后被釋放。
連接池掉用關(guān)閉
BasicDataSource implements DataSource
public synchronized void close() throws SQLException {
closed = true;
GenericObjectPool oldpool = connectionPool;
connectionPool = null;
dataSource = null;
try {
if (oldpool != null) {
oldpool.close();
}
} catch(SQLException e) {
throw e;
} catch(RuntimeException e) {
throw e;
} catch(Exception e) {
throw new SQLNestedException("Cannot close connection pool",
e);
}
}
生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對(duì)您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈(zèng)