2012-10-05 99 views
0

首先,我是Java/JSP/Eclipse的新手。不過,我有很多年的.Net經驗。我剛剛在Java中學習瞭如何使用javax.sql.DataSource連接到MS SQL Server(這樣我就不需要輸入用戶名/密碼)。Java JDBC連接池(如何檢查)?

現在,我創建了一個類來處理數據庫查詢,並且在那個類中,我有一個函數,我可以調用返回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? 有沒有辦法讓我檢查我確實在使用Connection Pooling?

對不起,如果我的問題聽起來很愚蠢。 Eclipse對於Java開發&非常新穎。請耐心等待,我會很感激你能爲我提供的任何指導。

我使用:sqljdbc4.jarMicrosoft(這似乎給我的錯誤,每當我打電話JdbcRowSet.execute()功能和/或通過.next()函數趣談NullReference但是,這是另一個問題

回答

0

是的,如果你使用容器數據源,它做連接池爲您服務。

連接池不依賴RowSet實現的,而r使用後應關閉owset。我建議立即將它讀入普通對象數組中並關閉。並且不要使用JdbcRowSetImpl,RowSet就夠了。

編輯: 我忘了回答你的問題:檢查你有多少個連接在池中,比循環調用的getConnection和執行選擇和不要關閉ResultSet。當您達到打開連接計數時出現錯誤==連接池中配置的最大打開連接數。

+0

謝謝!在連接池中獲得答案! 我可以總結一下: voRS =(RowSet)(proConnection.createStatement())。executeQuery(pvsSQLText); 會做詭計嗎?它會將ResultSet強制轉換爲RowSet? –

+0

恩,對不起,我的錯誤,不是RowSet,當然應該是ResultSet。 executeQuery將始終返回ResultSet,您可以手動獲取它,它具有方法next()和各種類型的getter來讀取當前行值。 – user1516873

+0

是的,我想到了ResultSet。再次。 –

0

得到JDBC connection object

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

它說:com.ibm.ws.rsadapter.jdbc.WSJdbcConnection 但不會問題是:(voConn.createStatement())。executeQuery(pvsSQLText)? 這裏使用的是createStatement(),它返回一個ResultSet。與JdbcRowSet的權限(ResultSet不使用連接池)相比,這個ResultSet是「壞的」?因此我將它轉換爲JdbcRowSet。但是,這種鑄造工作? –

+0

檢查了這個:http://download.java.net/jdk7/archive/b123/docs/api/javax/sql/rowset/JdbcRowSet.html。 – chanjarster