0

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

现在,我创建了一个类来处理数据库查询,在那个类中,我有一个函数,我可以调用它来返回一个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)aResultSet转换为 a JdbcRowSet。这是否意味着使用的底层连接仍然存在ResultSet?而不是RowSet?有没有办法让我检查我是否确实在使用连接池?

对不起,如果我的问题听起来很愚蠢。我对 Java 开发和 Eclipse 非常陌生。请多多包涵,我将不胜感激您能为我提供的任何指导。

我正在使用:sqljdbc4.jarfrom Microsoft(每当我调用函数和/或 .next() 函数时,它似乎都会给我错误JdbcRowSet.execute()。关于 NullReference 的东西。但这是另一个问题。

4

2 回答 2

0

得到JDBC connection object

 System.out.println(conn.getClass().getName());
于 2012-10-05T07:18:20.983 回答
0

是的,如果你使用容器数据源,它会为你做连接池。

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

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

于 2012-10-05T07:58:03.813 回答