2011-08-24 11 views
-1

나는 학교에서 자바를 배우기 때문에 어떤 이유로 아래 코드가 결과를 반환하지 않습니까? 이 코드에 문제가 있습니까? 12이 쿼리가 결과를 반환하지 않는 이유는 무엇입니까?

public static ResultSet GetByID(int studentID) { 
    // This method loads the mysql driver and establishes the database connection 
    Connect(); 

    ResultSet results = null; 

    try { 
     String query = "SELECT * FROM student where studentID = ?"; 

     PreparedStatement statement = Connection.prepareStatement(query); 

     statement.setInt(1, studentID); 
     results = statement.executeQuery(); 
    } catch (SQLException ex) { 
     LogException(ex); 
    } catch (Exception ex) { 
     System.out.println(ex); 
    } 

    // This method terminates the mysql connection. 
    Disconnect(); 

    return results; 
} 

호출 코드 (int(10) 임) studentID와 MySQL 데이터베이스에서 하나의 기록이있다이다 :

@Override 
public ResultSet query() { 
    return DB.GetByID(getStudentID()); // this is 12 
} 

이 아니라 단지 빈, null을 반환하지 않습니다 결과 집합입니다.

+0

studentID == 10이고 throw되는 예외가 없다고 가정한다고 가정합니다. – cwallenpoole

+0

오류/예외가 발생하고 있습니까? 그렇지 않다면 사용중인 학생 ID가 데이터 바에 있습니까? – Waqas

+0

나는 체크하고 정상적으로 리턴한다. 그러나 이것으로부터 리턴 된 ResultSet을 읽을 때 레코드가 없다. catch 블록 중 하나에 속하지 않습니다. – Eli

답변

3

ResultSet은 연결이 아직 열려있을 때만 사용할 수 있습니다. "연결 해제"하기 전에 읽으십시오.

다른 결과를 제공하지 않는 수정이있는 경우 쿼리가 테이블의 모든 행과 일치하지 않을 가능성이 가장 높습니다. 당신은 폐쇄 연결의 습관을해야


자원 누출을 방지하기 위해 finally 블록 등, 스트림. (이 있어야합니다 귀하의 강사 는 설명했다. 메모/텍스트 책을 확인하십시오.)


마지막으로, 초보자이기 때문에, 당신이 항상 방법에 대한 접수 한 Java 규칙을 준수해야한다고 지적 가치가있다 명명. Java 메소드 이름은 소문자로 시작해야합니다. GetByIDgetByID이어야하며 Disconnectdisconnect이어야합니다.

이 (당신의 강사/교사가 또는에 대한 표시를 고정하지 않는 경우에, 그/그녀는 소프트웨어 공학에 대한 범죄를 위해 향후 5 년에 대한 VBA를 쓰기로 비난해야합니다.)

+0

하하, 감사합니다. Stephen C. 저는 .NET 환경에서 일합니다. 당신의 물건은 완벽하게 작동했습니다, 감사합니다! – Eli

0

연결을 닫은 후에 resultSet 을 반환하려면 CachedRowSet을 사용해야합니다. StephenC이 말했듯이 ResultSet은 연결을 닫은 후에 비어 있습니다.

관련 문제