1. import java.beans.PropertyVetoException;  

  2. import java.sql.Connection;  

  3. import java.sql.SQLException;  

  4. import com.mchange.v2.c3p0.ComboPooledDataSource;  


  5. publicfinalclass ConnectionManager {  


  6. privatestatic ConnectionManager instance;  

  7. privatestatic ComboPooledDataSource dataSource;  


  8. private ConnectionManager() throws SQLException, PropertyVetoException {  

  9.        dataSource = new ComboPooledDataSource();  


  10.        dataSource.setUser("loux");  

  11.        dataSource.setPassword("loux");  

  12.        dataSource.setJdbcUrl("jdbc:oracle:thin:@192.168.100.70:1521:orcl");  

  13.        dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver");  

  14.        dataSource.setInitialPoolSize(5);  

  15.        dataSource.setMinPoolSize(1);  

  16.        dataSource.setMaxPoolSize(10);  

  17.        dataSource.setMaxStatements(50);  

  18.        dataSource.setMaxIdleTime(60);  

  19.    }  


  20. publicstaticfinal ConnectionManager getInstance() {  

  21. if (instance == null) {  

  22. try {  

  23.                instance = new ConnectionManager();  

  24.            } catch (Exception e) {  

  25.                e.printStackTrace();  

  26.            }  

  27.        }  

  28. return instance;  

  29.    }  


  30. publicsynchronizedfinal Connection getConnection() {  

  31.        Connection conn = null;  

  32. try {  

  33.            conn = dataSource.getConnection();  

  34.        } catch (SQLException e) {  

  35.            e.printStackTrace();  

  36.        }  

  37. return conn;  

  38.    }  

  39. }  

接下来是数据库使用了c3p0连接池和没有使用c3p0的连接操作。


Java代码 使用c3p0跟为使用c3p0的比较_import使用c3p0跟为使用c3p0的比较_import_02
  1. import java.sql.Connection;  

  2. import java.sql.PreparedStatement;  

  3. import java.sql.ResultSet;  

  4. import java.sql.SQLException;  


  5. import oracle.jdbc.pool.OracleDataSource;  


  6. publicclass ConnectionDemo {  


  7. publicstaticvoid main(String[] args) throws SQLException {  

  8.        System.out.println("使用连接池................................");  

  9. for (int i = 0; i < 20; i++) {  

  10. long beginTime = System.currentTimeMillis();  

  11.            Connection conn = ConnectionManager.getInstance().getConnection();  

  12. try {  

  13.                PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM t_fmscpy200");  

  14.                ResultSet rs = pstmt.executeQuery();  

  15. while (rs.next()) {  

  16.                }  

  17.            } catch (SQLException e) {  

  18.                e.printStackTrace();  

  19.            } finally {  

  20. try {  

  21.                    conn.close();  

  22.                } catch (SQLException e) {  

  23.                    e.printStackTrace();  

  24.                }  

  25.            }  


  26. long endTime = System.currentTimeMillis();  

  27.            System.out.println("第" + (i + 1) + "次执行花费时间为:" + (endTime - beginTime));  

  28.        }  


  29.        System.out.println("不使用连接池................................");  

  30. for (int i = 0; i < 20; i++) {  

  31. long beginTime = System.currentTimeMillis();  

  32.            OracleDataSource ods = new OracleDataSource();  

  33.            ods.setUser("loux");  

  34.            ods.setPassword("loux");  

  35.            ods.setURL("jdbc:oracle:thin:@192.168.100.70:1521:orcl");  

  36.            Connection conn = ods.getConnection();  

  37. try {  

  38.                PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM table_name");  

  39.                ResultSet rs = pstmt.executeQuery();  

  40. while (rs.next()) {  

  41. // do nothing...

  42.                }  

  43.            } catch (SQLException e) {  

  44.                e.printStackTrace();  

  45.            } finally {  

  46. try {  

  47.                    conn.close();  

  48.                } catch (SQLException e) {  

  49.                    e.printStackTrace();  

  50.                }  

  51.            }  

  52. long endTime = System.currentTimeMillis();  

  53.            System.out.println("第" + (i + 1) + "次执行花费时间为:"

  54.                                + (endTime - beginTime));  

  55.        }  


  56.    }  

  57. }  

最后是控制台输出:


控制台输出代码 使用c3p0跟为使用c3p0的比较_import使用c3p0跟为使用c3p0的比较_import_02
  1. 使用连接池................................  

  2. 1次执行花费时间为:1469

  3. 2次执行花费时间为:0

  4. 3次执行花费时间为:16

  5. 4次执行花费时间为:0

  6. 5次执行花费时间为:0

  7. 6次执行花费时间为:15

  8. 7次执行花费时间为:0

  9. 8次执行花费时间为:0

  10. 9次执行花费时间为:0

  11. 10次执行花费时间为:0

  12. 11次执行花费时间为:16

  13. 12次执行花费时间为:0

  14. 13次执行花费时间为:0

  15. 14次执行花费时间为:0

  16. 15次执行花费时间为:0

  17. 16次执行花费时间为:16

  18. 17次执行花费时间为:0

  19. 18次执行花费时间为:0

  20. 19次执行花费时间为:15

  21. 20次执行花费时间为:0

  22. 不使用连接池................................  

  23. 1次执行花费时间为:47

  24. 2次执行花费时间为:31

  25. 3次执行花费时间为:32

  26. 4次执行花费时间为:46

  27. 5次执行花费时间为:32

  28. 6次执行花费时间为:31

  29. 7次执行花费时间为:47

  30. 8次执行花费时间为:31

  31. 9次执行花费时间为:47

  32. 10次执行花费时间为:31

  33. 11次执行花费时间为:47

  34. 12次执行花费时间为:31

  35. 13次执行花费时间为:32

  36. 14次执行花费时间为:46

  37. 15次执行花费时间为:47

  38. 16次执行花费时间为:32

  39. 17次执行花费时间为:46

  40. 18次执行花费时间为:47

  41. 19次执行花费时间为:32

  42. 20次执行花费时间为:31

可以看出,在使用连接池时,第一次执行花费的时间稍长,因为第一次初始化操作需要创建多个连接并放入池中,以后使用时将会大大缩短执行时间。

在不使用连接池时,每次花费的时间都比较长。