2011-11-21 3 views
1

Oracle 데이터베이스에서 결과를 가져 오려고합니다. 정확한 쿼리를 작성했으며 sqlplus에서 수동으로 실행하면 정확한 결과를 생성합니다. 또한 쿼리가 하나의 행과 만 일치 할 때 코드가 예상대로 작동합니다 (즉, ResultSet에 행이 하나만 있으면 모든 것이 작동 함). 그러나 둘 이상의 행이 조회와 일치하면 Oracle JDBC에 의해 리턴 된 ResultSet은 비어 있습니다. 결과 집합을 검사결과 집합이 결과로 채워지지 않습니다.

public Component[] getAllComponents(int typeId, int osId) throws SQLException 
{ 
    String query= "SELECT c.component_id, c.component_name, c.component_version, c.type_id, c.post_download_instructions, " 
       + "o.os_id, o.os_name, o.description AS os_description, " 
       + "i.file_location, i.release_date, i.patch_number, i.file_id, " 
       + "i.description AS i_description " 
       + "FROM components c, installation_files i, operating_systems o " 
       + "WHERE c.type_id = ? " 
       + "AND i.os_id = ? " 
       + "AND c.component_id = i.component_id " 
       + "AND i.os_id = o.os_id"; 

    ResultSet results  = null; 
    PreparedStatement stmt = null; 
    ArrayList<Component> found = new ArrayList<Component>(); 

    try { 
     stmt = dbConn.prepareStatement(query); //dbConn is member variable 

     stmt.setInt(1, typeId); 
     stmt.setInt(2, osId); 

     results = stmt.executeQuery(); 

     while(results.next()){ 
      //Some logic 
     } 

    } finally { 
     if(results != null) results.close(); 
     if(stmt != null) stmt.close(); 
     dbConn.close(); 
    } 

    //More Code 
    //etc. etc. 

이 가져온 결과는 둘 이상의 행을 포함해야 할 때() ResultSet.next를 호출하는 것은 결코 true을 생산 없다는 것을 보여줍니다. 그러나 쿼리를 수동으로 실행하면 결과가 생성되고 한 행만 반환되면 모든 것이 올바르게 작동합니다. 아무도 무슨 일이 일어나는지 알아? 나는 오라클의 ojdbc6.jar를 사용하고 있습니다.

감사합니다.

+0

아마도 당신이 작업하고 있다고 생각하는 데이터베이스로 작업하지 않고 있습니까? 어쩌면 여러 개의 DB를 가지고있을 것입니다. 하나는 프로덕션 용이고 다른 하나는 테스트 환경 용이고 다른 하나는 로컬 개발 용입니다. JDBC URL을 더블 체크하십시오. 아니면 당신이 지정하고있는'typeId' 및/또는'osId'를 지정하지 않았습니까? 그들을 디버그하십시오. – BalusC

+0

네, 설정을 다시 확인합니다. 이 코드는 괜찮은 것 같습니다. –

+0

'SYSDATE FROM DUAL'에서 'SELECT SYSDATE FROM DUAL'을 확인할 수 있습니다. 이것이 작동하면 쿼리 나 매개 변수에 문제가있는 것입니다. –

답변

0

모든 필드 대신 COUNT(*)이있는 구성 요소가 실제로 있는지 확인할 수 있습니다. COUNT(*)이 하나 이상인 경우에만 쿼리를 실행하십시오.

관련 문제