Java JDBC连接池(如何检查)?

时间:2012-10-05 07:16:01

标签: java jdbc connection-pooling

首先,我是Java/JSP/Eclipse的新手。但是,我有很多年的.Net经验。我刚刚在Java中学习了如何使用javax.sql.DataSource建立与MS SQL Server的连接(这样我就不需要输入用户ID /密码)。

现在,我已经创建了一个用于处理数据库查询的类,在该类中,我有一个函数可以调用它来返回RowSet

    import javax.naming.Context;
    import javax.naming.InitialContext;
    import java.sql.Connection;

    import javax.sql.DataSource;
    import javax.sql.rowset.JdbcRowSet;
    import com.sun.rowset.JdbcRowSetImpl;

    public abstract class ClsDBAccessBASE {
        public boolean prbAutoCommit = true;
        public String prsDataSourceName = "";

            public ClsDBAccessBASE( String pvsDataSourceName ) {
                    prsDataSourceName = pvsDataSourceName;
            }
            public JdbcRowSet fnorsSQLText( String pvsSQLText ) {
                JdbcRowSet voRS = null;

                try {
                    Context voContext = new InitialContext();
                    DataSource voDS = (DataSource)voContext.lookup(prsDataSourceName);
                    Connection voConn = (Connection)voDS.getConnection();
                    voRS = new JdbcRowSetImpl((voConn.createStatement()).executeQuery(pvsSQLText));
                } catch (Exception e) {e.printStackTrace();}

                return voRS;
            }
        }
    }

我的目标是确保我使用连接池。我理解JdbcRowSet会自动实现吗?但是,问题(我认为)是我将(voConn.createStatement()).executeQuery(pvsSQLText)ResultSet投射到JdbcRowSet。这是否意味着使用的基础连接仍为ResultSet?而不是RowSet? 有没有办法让我检查一下我确实在使用连接池?

对不起,如果我的问题听起来很愚蠢。我是Java开发的新手。日食。请耐心等待,我将非常感谢您提供给我的任何指导。

我正在使用:来自sqljdbc4.jar的{​​{1}}(每当我调用Microsoft函数和/或.next()函数时,这似乎都会给我错误。有关NullReference的信息。但那是另一个问题。

2 个答案:

答案 0 :(得分:0)

获取JDBC connection object

 System.out.println(conn.getClass().getName());

答案 1 :(得分:0)

是的,如果您使用容器DataSource,它会为您执行连接池。

连接池不依赖于RowSet实现,并且应在使用后关闭rowset。我建议立即将它读入普通物体阵列并关闭。并且不要使用JdbcRowSetImplRowSet就足够了。

编辑:  我忘了回答你的问题:检查你在池中有多少连接,而不是在循环调用getConnection和执行select,以及不关闭 ResultSet。在连接池中达到count open connection == configured max open connection时会出现错误。