程序员人生 网站导航

jdbc 自己理解

栏目:数据库应用时间:2015-04-30 08:20:48
1、connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ZSORA10G", "gao", "admin");

如果代码里面始终就只有1个connection,是不是可以写jdbc代码 可以!
但是会造成以下问题:例如有两个客户端访问数据库,同享1个connection  ,如果其中1个 回滚了,那末第2个固然也回滚了,

事物不安全    所以不同享1个数据库对象


所以在web项目中 都是 1个客户端 1个connection  。这样会致使 每次获得连接 都要初始化获得connection对象,这是非常消耗内存的




这就是为何我们使用连接池,连接池里面初始化几个 连接,不够用的时候 就继续增加,不用的时候 再烧毁点,连接池里面始终
保存固定的connection。 


关于connection.close的理解。 如果是 1个客户端1个connection ,那末使用以后肯定要关掉连接 connection.close。不然容易内存溢出


关于连接池的 调用关闭connection方法  不是立即就关闭,而是让对象回归到连接池里面。


这些大于最小连接数的数据库连接在使用完不会马上被释放,它将被放到连接池中等待重复使用或是空闲超时后被释放。


连接池掉用关闭

 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);
        }
    }
------分隔线----------------------------
------分隔线----------------------------

最新技术推荐