2012-10-05 4 views
0

우선, 전 Java/JSP/Eclipse입니다. 그러나, 나는 수년간 .Net 경험을했습니다. 나는 방금 javax.sql.DataSource을 사용하여 MS SQL Server에 연결하는 방법을 Java에서 배웠습니다 (따라서 userid/암호를 입력 할 필요가 없습니다).Java JDBC 연결 풀링 (확인 방법)?

지금 당장 DB 쿼리를 처리 할 클래스를 만들었고이 클래스에서는 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? 연결 풀링을 실제로 사용하고 있는지 확인하는 방법이 있습니까?

내 질문이 어리석은 경우 미안 해요. 나는 자바 개발 & Eclipse에 매우 익숙하다. 제발 저를 참 아 주시면 제가 제게 제공 할 수있는 모든 지침을 고맙게 생각합니다. . 나는 JdbcRowSet.execute() 기능 및/또는 다음 내용() 함수 NullReference에 대해 뭔가를 호출 할 때마다 나에게 오류를 줄 것으로 보인다 Microsoft에서 sqljdbc4.jar (그러나 그것은 또 다른 문제입니다

답변

0

예, 그것은. 연결 당신을 위해 풀링을

연결의 RowSet 구현의 의존하지 풀링 및 R 사용 후 뚜껑을 닫아야합니다. 나는 immediatly 평범한 물체의 배열로 그것을 읽고 닫기를 제안한다. 그리고 사용하지 마십시오 JdbcRowSetImpl, RowSet 충분합니다.

편집 : 당신은 루프 콜의 getConnection에 비해, 풀에있는 선택 실행 얼마나 많은 연결을 확인하고, ResultSet을 닫지 마십시오 : 내가 잊지 가 귀하의 질문에 대답합니다. 열린 연결 수 == 연결 풀의 구성된 최대 연결 수에 도달하면 오류가 발생합니다.

+0

고맙습니다! 연결 풀링에 대한 답변을 얻었습니다! 요약 할 수 있습니다 : voRS = (RowSet) (proConnection.createStatement()). executeQuery (pvsSQLText); 트릭을 수행할까요? ResultSet을 RowSet으로 변환 할 것인가? –

+0

음, 내 실수는 RowSet이 아니라 물론 ResultSet이어야합니다. executeQuery는 항상 ResultSet을 리턴 할 것이고, 수동으로 가져올 수 있으며 next() 메소드와 현재 행 값을 읽는 다양한 유형의 getter가 있습니다. – user1516873

+0

예, 결과 집합을 찾았습니다. 다시 tnx. –

0

JDBC connection object

를 얻을 :

내가 사용하고 있습니다.. 당신은 컨테이너 데이터 소스를 사용하는 경우

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

그것은 말합니다 : com.ibm.ws.rsadapter.jdbc.WSJdbcConnection 하지만 문제가되지 않습니다 : (voConn.createStatement()). executeQuery (pvsSQLText)? 여기서 ResultSet을 리턴하는 createStatement()를 사용하고 있습니다. 이 ResultSet은 JdbcRowSet 권한 (ResultSet은 연결 풀링을 사용하지 않음)과 비교하여 "불량"입니까? 그래서 나는 그것을 JdbcRowSet으로 캐스팅했다. 하지만이 캐스팅이 효과가 있습니까? –

+0

체크 표시 : http://download.java.net/jdk7/archive/b123/docs/api/javax/sql/rowset/JdbcRowSet.html. – chanjarster