收藏:http://chinaestone.javaeye.com/blog/607083
自己寫了一個Jdbc連接mysql的例子,算是復習了一下Jdbc的用法。
整個例子的源碼如下:
-
- 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數據的工作已經完成了,但是這里我突然想出了一個問題:為什么所有的數據在大負載的情況下都要用連接池?
現在通過這個簡單的例子可以清楚的看到,如過每次我們請求數據時,都要創建一個Database對象,通過該對象提供的方法來查詢數據庫,該對象中封裝了一個Connection,這個連接用于連
接msyql,相當于在mysql和java之間建立了一條數據的傳輸通道。并且是一個獨立的線程。如果有很多Connection操作同時連接到mysql的時候,就需要建立很多的Connection,這樣的話
無疑是浪費了很多的Connection實例。并且用可能引起內存泄漏,為了避免這樣情況的方法,使用連接池可以緩解數據庫的壓力。如果不添加連接池,最有可能影響數據庫性能的一種現象
是:當msyql的負載(connection)已滿,當前已經連接到msyql上的數據庫的Connection都在等待mysql返回數據,如果再有新的連接進來,也只能處于等待狀態,當mysql中已有的連接完成
查詢退出后,新的連接才能進入到mysql數據庫中。這時新進來的Connection需要重新創建連接,無法復用已經創建的連接對象。對于數據庫來說,創建和斷開連接是比較耗費資源的。因此使
用連接池來重復使用已經創建好的對象可以極大節省數據庫的查詢時間。