2014-01-11 2 views
0

Java에서 preparedStatement를 사용하여 MySql의 테이블에서 두 개의 열을 가져옵니다.이 쿼리는 유효하며 mySql DB에서 직접 실행하면 행을 반환합니다. 이 메소드 호출의 경우, ResultSet은 각 ResultSet.next() 호출에 "false"값을가집니다.executeQuery에서 ResultSet이 false입니다. 행이 존재하는 경우에도 자바가 발생합니다.

private ResultSet fetchFriends(int lActProfId) throws SQLException { 
     // TODO Auto-generated method stub 
     String selectRelationQry= "SELECT friend_id, type FROM fs_relationship WHERE profile_id =?"; 
     System.out.println("---- In method FetchAndInsertInWall()->fetchFriends - Qry: "+selectRelationQry); 
     pst = lCon.prepareStatement(selectRelationQry); 
     pst.setInt(1, lActProfId); 
     System.out.println("lActProfId: "+ lActProfId); 
     ResultSet res3 = pst.executeQuery(); 
     System.out.println("---- temp--- In method FetchAndInsertInWall()->fetchFriends query has no Results"); 
     if(!res3.next()){ 
      System.out.println("---- In method FetchAndInsertInWall()->fetchFriends query has no Results"); 
     } else {System.out.println("Elements in res3: "+res3.next() + res3.next() + res3.next()); 
     } 
     pst = null; 
     return res3; 
    } 

내가 콘솔에 다음과 같은 출력을 얻고있다 :

---- In method FetchAndInsertInWall()->fetchFriends - Qry: SELECT friend_id, type FROM fs_relationship WHERE profile_id =? 
lActProfId: 5002 
---- temp--- In method FetchAndInsertInWall()->fetchFriends query has no Results 
Element in res31: false 
----> WallInsertions Failed for Uid: 5002 
java.sql.SQLException: Illegal operation on empty result set. 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:989) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:975) 
    at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:920) 
    at com.mysql.jdbc.ResultSetImpl.checkRowPos(ResultSetImpl.java:855) 
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2710) 
    at com.mysql.jdbc.ResultSetImpl.getInt(ResultSetImpl.java:2851) 
    at com.fs.javadbact.FetchDataAndInsertInWall.fetchAndInsertInWall(FetchDataAndInsertInWall.java:64) 
    at com.fs.javadbact.ConsumerTest.run(ConsumerTest.java:86) 
    at java.lang.Thread.run(Unknown Source) 
Jan 12, 2014 3:34:57 AM com.fs.javadbact.ConsumerTest run 

는이 문제를 해결하고 정확한 데이터를 적절한의 ResultSet을 얻는 방법을 도와주세요 아래는 코드입니다.

+0

당신은 물어보기 전에 결과가 없다는 것을 말하는'system.out'을 가지고 있으며,'.next'를 3 번 ​​사용하고 있습니다. – nachokk

+0

나는 당신이 원하는 것을 얻지 못합니까?! –

+0

이 없으면 next() (결과에서 반복)을 클릭하여 오류를 발생시킬 수있는 데이터베이스의 값을 얻을 수 없습니다. 동일한 인수를 사용하여 정확히 동일한 쿼리가 db browsing의 행을 반환하면 도구를 사용하면 db browsing 도구가 삽입되었지만 아직 커밋되지 않은 행을 반환하거나 코드가 데이터베이스 탐색 도구와 동일한 데이터베이스/스키마를 사용하지 않음을 의미합니다. –

답변

0

난 당신이 선언 잊어 버린 생각 PreparedStatement 변수
쓰기 pst 전에 :
PreparedStatement pst = lCon.prepareStatement(selectRelationQry);
보다는 :

pst = lCon.prepareStatement(selectRelationQry); 
+0

코드의 다른 부분에서 선언되었습니다. – AbhiBlr

0

사용에는 getString() 대신의 값을 얻을 수) (다음 열.

결과가 3 개 미만이면 결과 집합이 고갈됩니다. next()가 false를 한 번 반환 한 후에 작업해야하는지 여부는 알 수 없습니다.