收藏:http://chinaestone.javaeye.com/blog/607083
自己寫了一個(gè)Jdbc連接mysql的例子,算是復(fù)習(xí)了一下Jdbc的用法。
整個(gè)例子的源碼如下:
-
- import java.sql.Connection;
-
- public class Database{
-
- private Connection connection;
-
- public Database(){
- Class.forName("com.mysql.jdbc.Driver").newInstance();
- }
-
-
-
- public excuteQuery(){
- String url ="jdbc:mysql://localhost:3306/mysql?user=root&password=654321";
- connection = DriverManeger.getConnection(url);
- Statement statement = connection.createStatement();
- String sql ="select * from help_relation where help_topic_id<100";
- ResultSet rs = statement.executeQuery();
-
- while(rs.next){
- System.out.printlnl(rs.getString(1));
- }
- }
-
-
- public static void main(String[] args){
- new Database().executeQuery();
- }
- }
-
到此,jdbc連接mysql數(shù)據(jù)的工作已經(jīng)完成了,但是這里我突然想出了一個(gè)問題:為什么所有的數(shù)據(jù)在大負(fù)載的情況下都要用連接池?
現(xiàn)在通過這個(gè)簡(jiǎn)單的例子可以清楚的看到,如過每次我們請(qǐng)求數(shù)據(jù)時(shí),都要?jiǎng)?chuàng)建一個(gè)Database對(duì)象,通過該對(duì)象提供的方法來查詢數(shù)據(jù)庫,該對(duì)象中封裝了一個(gè)Connection,這個(gè)連接用于連
接msyql,相當(dāng)于在mysql和java之間建立了一條數(shù)據(jù)的傳輸通道。并且是一個(gè)獨(dú)立的線程。如果有很多Connection操作同時(shí)連接到mysql的時(shí)候,就需要建立很多的Connection,這樣的話
無疑是浪費(fèi)了很多的Connection實(shí)例。并且用可能引起內(nèi)存泄漏,為了避免這樣情況的方法,使用連接池可以緩解數(shù)據(jù)庫的壓力。如果不添加連接池,最有可能影響數(shù)據(jù)庫性能的一種現(xiàn)象
是:當(dāng)msyql的負(fù)載(connection)已滿,當(dāng)前已經(jīng)連接到msyql上的數(shù)據(jù)庫的Connection都在等待mysql返回?cái)?shù)據(jù),如果再有新的連接進(jìn)來,也只能處于等待狀態(tài),當(dāng)mysql中已有的連接完成
查詢退出后,新的連接才能進(jìn)入到mysql數(shù)據(jù)庫中。這時(shí)新進(jìn)來的Connection需要重新創(chuàng)建連接,無法復(fù)用已經(jīng)創(chuàng)建的連接對(duì)象。對(duì)于數(shù)據(jù)庫來說,創(chuàng)建和斷開連接是比較耗費(fèi)資源的。因此使
用連接池來重復(fù)使用已經(jīng)創(chuàng)建好的對(duì)象可以極大節(jié)省數(shù)據(jù)庫的查詢時(shí)間。