2014-05-16 3 views
0

아래 코드를 살펴보십시오. 여기서 문제는 쿼리가 행이없는 열 (LOGIN) (SQL Developer가 말하는 것)을 반환하고 rs.next()가 진행되고 rs.getString (1)이 Users 테이블의 첫 번째 행을 반환한다는 것입니다. currentRow ResultSet의 값이 -1이라는 사실을 이해하지 못합니다. 이는 대량의 비 일관성 인 쿼리에서 하나의 행을 가져옵니다. next() 메서드는 반환되는 행이 없을 경우 앞으로 이동하지 않도록하려면 어떻게해야합니까?ResultSet의 문제점

ResultSet rs = null; 
String name = null; 
Statement stat = db.conn.createStatement(); 
String query = "SELECT Users.LOGIN FROM Users, Accessibility WHERE Accessibility.Users_IDGRANTING=4 AND Users.ID=Accessibility.Users_IDRECEIVING"; 
rs = stat.executeQuery(query); 

while(rs.next()) 
{ 
name = rs.getString(1); 
} 
+0

'rs.getString (1)'의 내용을 인쇄 해 보았습니까? 아마도 당신은 테스트에서 다른 데이터베이스에 연결하고있을 것입니다. –

+0

이름에 getString (1)이 포함되어 있습니다. 첫 번째 레코드 인 테이블 Users의 첫 번째 열입니다. 나는 다른 데이터베이스를 갖고 있지 않다. – user3646305

+1

결과 집합이 일부 문에 의해 반환되었는지 묻는 것이 두려워요. – Leo

답변

0

ResultSet의 커서 초기 제 기록 전에 위치된다. 따라서 rs이 비어 있으면 rs.next()은 즉시 false을 반환하고 while 루프는 즉시 종료됩니다. 귀하의 rs가 다른 진술에 의해 만들어 졌는지 확인하십시오.

0

"행이 반환되지 않으면 next() 메소드가 앞으로 앞으로 나아 가지 않도록해야합니까?"
그런 경우 rs.next()는이 경우 false가됩니다.

+0

내가 말했듯이, SQL Developer는 위에서 언급 한 쿼리에 반응합니다 (필자는 디버깅 모드에서 쿼리를 그대로 복사합니다). 코드는 내가 이런 식으로 reacys를 게시했습니다. rs {currentRow = -1 fetchedRowCount = 1, maxRows = 0} rs.next()는 false를 반환하지 않습니다. 행을 반환합니다. 나는 이유를 모른다. – user3646305

+0

[PreparedStatement] (http://docs.oracle.com/javase/7/docs/api/java/sql/PreparedStatement.html)를 사용하여 문제가 해결되는지 확인하십시오. 여기에 표시되는 코드는 올바르게 작동합니다. – mike

관련 문제