C3P0使用前后的比较

从网上看到的一个关于数据库连接在使用了C3P0前后的比较。本人暂时还没有测试过。

 

下面是一个C3P0的工具类。

import java.beans.PropertyVetoException;
import java.sql.Connection;
import java.sql.SQLException;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public final class ConnectionManager {

    private static ConnectionManager instance;
    private static ComboPooledDataSource dataSource;

    private ConnectionManager() throws SQLException, PropertyVetoException {
        dataSource = new ComboPooledDataSource();

        dataSource.setUser("loux");
        dataSource.setPassword("loux");
        dataSource.setJdbcUrl("jdbc:oracle:thin:@192.168.100.70:1521:orcl");
        dataSource.setDriverClass("oracle.jdbc.driver.OracleDriver");
        dataSource.setInitialPoolSize(5);
        dataSource.setMinPoolSize(1);
        dataSource.setMaxPoolSize(10);
        dataSource.setMaxStatements(50);
        dataSource.setMaxIdleTime(60);
    }

    public static final ConnectionManager getInstance() {
        if (instance == null) {
            try {
                instance = new ConnectionManager();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
        return instance;
    }

    public synchronized final Connection getConnection() {
        Connection conn = null;
        try {
            conn = dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return conn;
    }
}

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

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import oracle.jdbc.pool.OracleDataSource;

public class ConnectionDemo {

    public static void main(String[] args) throws SQLException {
        System.out.println("使用连接池................................");
        for (int i = 0; i < 20; i++) {
            long beginTime = System.currentTimeMillis();
            Connection conn = ConnectionManager.getInstance().getConnection();
            try {
                PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM t_fmscpy200");
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }

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

        System.out.println("不使用连接池................................");
        for (int i = 0; i < 20; i++) {
            long beginTime = System.currentTimeMillis();
            OracleDataSource ods = new OracleDataSource();
            ods.setUser("loux");
            ods.setPassword("loux");
            ods.setURL("jdbc:oracle:thin:@192.168.100.70:1521:orcl");
            Connection conn = ods.getConnection();
            try {
                PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM table_name");
                ResultSet rs = pstmt.executeQuery();
                while (rs.next()) {
                                    // do nothing...
                }
            } catch (SQLException e) {
                e.printStackTrace();
            } finally {
                try {
                    conn.close();
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }
            long endTime = System.currentTimeMillis();
            System.out.println("第" + (i + 1) + "次执行花费时间为:"
                                + (endTime - beginTime));
        }

    }
}

 最后是控制台输出:

使用连接池................................ 
第1次执行花费时间为:1469 
第2次执行花费时间为:0 
第3次执行花费时间为:16 
第4次执行花费时间为:0 
第5次执行花费时间为:0 
第6次执行花费时间为:15 
第7次执行花费时间为:0 
第8次执行花费时间为:0 
第9次执行花费时间为:0 
第10次执行花费时间为:0 
第11次执行花费时间为:16 
第12次执行花费时间为:0 
第13次执行花费时间为:0 
第14次执行花费时间为:0 
第15次执行花费时间为:0 
第16次执行花费时间为:16 
第17次执行花费时间为:0 
第18次执行花费时间为:0 
第19次执行花费时间为:15 
第20次执行花费时间为:0 
不使用连接池................................ 
第1次执行花费时间为:47 
第2次执行花费时间为:31 
第3次执行花费时间为:32 
第4次执行花费时间为:46 
第5次执行花费时间为:32 
第6次执行花费时间为:31 
第7次执行花费时间为:47 
第8次执行花费时间为:31 
第9次执行花费时间为:47 
第10次执行花费时间为:31 
第11次执行花费时间为:47 
第12次执行花费时间为:31 
第13次执行花费时间为:32 
第14次执行花费时间为:46 
第15次执行花费时间为:47 
第16次执行花费时间为:32 
第17次执行花费时间为:46 
第18次执行花费时间为:47 
第19次执行花费时间为:32 
第20次执行花费时间为:31
可以看出,在使用连接池时,第一次执行花费的时间稍长,因为第一次初始化操作需要创建多个连接并放入池中,以后使用时将会大大缩短执行时间。 

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

 

转载于:http://topic.csdn.net/u/20070702/21/82749d1e-0746-415e-b7da-1ddfb3c885f5.html

你可能感兴趣的:(oracle,sql,.net,jdbc)