2011-12-12 3 views
3

id (정수)를 가져 오는 작은 함수를 작성하고 거리가있는 친구 수를 반환하려고합니다. < = 3 (친구 정보는 테이블에 저장 됨 ) : Likes (uid1, uid2)는 다음을 의미합니다. uid1은 uid2를 좋아합니다. 나는 다음을 수행, 그리고PreparedStatement의 JDBC 오류

String likesDistance = 
     "SELECT uid2 " + //DISTANCE = 1 
     "FROM Likes " + 
     "WHERE uid1 = ? " + 
     "UNION " + 
     "SELECT L2.uid2 " + //DISTANCE = 2 
     "FROM Likes L1, Likes L2 " + 
     "WHERE L1.uid1 = ? and L1.uid2 = L2.uid1 " + 
     "UNION "+ 
     "SELECT L3.uid2 " + //DISTANCE = 3 
     "FROM Likes L1, Likes L2 , Likes L3 " + 
     "WHERE L1.uid1 = ? and L1.uid2 = L2.uid1 and L2.uid2 = L3.uid1 "; 

:

PreparedStatement pstmt2 = con.prepareStatement(likesDistance); 
     pstmt1.setInt(1, u); 
     pstmt1.setInt(2, u); 
     System.out.println("2"); 
     pstmt1.setInt(3, u); 
     System.out.println("3"); 
     pstmt1.setInt(4, u); 
     pstmt1.setInt(5, u); 

유는 전에 언급으로, 함수에 전달 된 정수 어디
나는이 간단한 쿼리를 썼다.
이 코드는 모두 '시도'블록 내에 있습니다. 실행하려고하면 첫 번째 인쇄물 ("2")이 인쇄되지만 두 번째 파일 ("3")은 인쇄되지 않고 다음과 같은 예외 메시지가 나타납니다.
열 색인이 범위를 벗어났습니다. 열 수 : 2.

왜 이런 식으로하고 원하는대로 작동하도록 변경할 수 있습니까?

고마워요.

답변

0

복사하여 붙여 넣으시겠습니까? 구문 2에 대한 매개 변수를 설정하려고했을 것입니다.

+0

감사합니다. 복사하여 붙여 넣기 오류가 발생했습니다. – limlim

0

준비된 진술은 pstmt2입니다. pstmt1에 속성을 설정하고 있습니다.

pstmt2에서 속성을 설정하면 올바르게 작동합니다.

0

pstmt2에 속성을 설정하더라도 문에 세 개의 자리 표시자가 있으므로 다섯 개의 자리 표시자를 설정하므로 예외가 발생합니다.