Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/379.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JDBC连接池(如何检查)?_Java_Jdbc_Connection Pooling - Fatal编程技术网

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

Java JDBC连接池(如何检查)?,java,jdbc,connection-pooling,Java,Jdbc,Connection Pooling,首先,我不熟悉Java/JSP/Eclipse。然而,我有多年的.Net经验。我刚刚用Java学习了如何使用javax.SQL.DataSource与MS SQL Server建立连接(这样我就不需要输入用户名/密码) 现在,我已经创建了一个类来处理DB查询,在这个类中,我有一个函数,我可以调用它来返回行集 import javax.naming.Context; import javax.naming.InitialContext; import java.sql.Co

首先,我不熟悉
Java/JSP/Eclipse
。然而,我有多年的.Net经验。我刚刚用Java学习了如何使用
javax.SQL.DataSource
与MS SQL Server建立连接(这样我就不需要输入用户名/密码)

现在,我已经创建了一个类来处理DB查询,在这个类中,我有一个函数,我可以调用它来返回
行集

    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)
结果集
转换为
JdbcRowSet
。这是否意味着使用的基础连接仍然是
ResultSet
?而不是
行集
? 有没有办法检查我是否确实使用了连接池

对不起,如果我的问题听起来很傻的话。我对Java开发和Eclipse非常陌生。请容忍我,我将感谢你能为我提供的任何指导


我正在使用:
sqljdbc4.jar
from
Microsoft
(每当我调用
JdbcRowSet.execute()
函数和/或.next()函数时,似乎都会出现错误。关于NullReference的内容。但这是另一个问题。

获取
JDBC连接对象

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

是的,如果您使用容器数据源,它会为您执行连接池

连接池不依赖于行集实现,行集应该在使用后关闭。我建议立即将其读入普通对象数组并关闭。并且不要使用
JdbcRowSetImpl
RowSet
就足够了

编辑:
我忘了回答您的问题:检查池中有多少连接,而不是在循环中调用getConnection并执行select,并且不要关闭
ResultSet
。当您达到count open connection==连接池中配置的最大打开连接数时,会出现错误。

上面写着:com.ibm.ws.rsadapter.jdbc.WSJdbcConnection,但p不会问题是:(voConn.createStatement()).executeQuery(pvsSQLText)?在这里,它使用createStatement()返回结果集。与JdbcRowSet right相比,此结果集是“坏的”(结果集不使用连接池)?因此我将其强制转换为JdbcRowSet。但是此强制转换是否有效?检查此项:。谢谢!获得了连接池的答案!我可以总结一下:voRS=(RowSet)(proConnection.createStatement()).executeQuery(pvsSQLText);可以吗?它会将结果集强制转换为行集?嗯,对不起,我的错误,而不是行集,当然应该是结果集。executeQuery将始终返回结果集,您可以手动获取它,它有方法next()和各种类型的getter来读取当前行值。