10
回答
使用proxool+dbutils怎么样释放Connection?
华为云实践训练营,热门技术免费实践!>>>   

使用proxool+dbutils怎么样释放Connection,还是不用管。比如QueryRunner是通过传入一个dataSource获取的,使用过后,queryRunner对象改如何处理。

举报
共有10个答案 最后回答: 7年前

dbutils 提供了两类操作方法,一类是不用传递Connection操作方法。一类是需要传递Connection的操作方法。

根据你的需要自己选择!

引用来自#3楼“红薯”的帖子

两种方法:

1. 传递 DataSource 实例给 dbutils,由 dbutils 负责关闭
2. 自行关闭 Connection

谢谢大佬,可是如果将DataSource实例给dbutils关闭。

引用来自#4楼“joliny”的帖子

dbutils 提供了两类操作方法,一类是不用传递Connection操作方法。一类是需要传递Connection的操作方法。

根据你的需要自己选择!

不用传递Connection操作方法是哪个类下的,我没有找见,请指教

本想百度下“传递 DataSource 实例给 dbutils”,没想到百度速度这么快,中午1点发的内容,2点就收录了,还是第一条。OSCHINA厉害。

引用来自#6楼“杨焱”的帖子

引用来自#4楼“joliny”的帖子

dbutils 提供了两类操作方法,一类是不用传递Connection操作方法。一类是需要传递Connection的操作方法。

根据你的需要自己选择!

不用传递Connection操作方法是哪个类下的,我没有找见,请指教

QueryRunner里面,不用传递Connection的操作方法是应为要设置DataSource,在方法体内根据Datasource获取连接,然后直接关闭

 

    public int update(String sql, Object... params) throws SQLException {

        Connection conn = this.prepareConnection();

        try {

            return this.update(conn, sql, params);

        } finally {

            close(conn);

        }

    }

需要传递Connection的方法是要在方法体外面进行关闭链接的!及手动关闭连接。或者按照红薯的做法,采取链接和线程绑定。最后采用过滤器进行关闭!

    public int update(Connection conn, String sql, Object... params)

        throws SQLException {

 

        PreparedStatement stmt = null;

        int rows = 0;

 

        try {

            stmt = this.prepareStatement(conn, sql);

            this.fillStatement(stmt, params);

            rows = stmt.executeUpdate();

 

        } catch (SQLException e) {

            this.rethrow(e, sql, params);

 

        } finally {

            close(stmt);

        }

 

        return rows;

    }

哦。哈哈哈哈,那就好。就是用DataSource就不需要关闭了。他自己会关。

那如何把proxool的DataSource给DBUTILS用

构造函数直接传递过去就可以了!    

public QueryRunner(DataSource ds) {

        super();

        this.ds = ds;

    }

目前是这么做的,   

private static final DataSource    ds            = new ProxoolDataSource(
                                                        poolName);

public QueryRunner runner() {
        return new QueryRunner(ds);
    }

数据库连接成功了,proxool的例子上的alias 名称前面加了proxool,使用DataSource的时候就不需要加,直接用DriverManager获取的时间就需要加。

嘿嘿

顶部