2011-12-12 77 views
3

我正在尝试编写一个小函数来获取一个id u(整数),并且返回您拥有距离的朋友的数量< = 3(朋友信息存储在表 :喜欢(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); 

其中u,如之前提到的,是传递给函数的整数。
所有这些代码都在'尝试'区块内。当我尝试运行它时,它会打印第一个打印输出(“2”),但不打印第二个(“3”),并且收到以下异常消息:
列索引超出范围:3,列数:2.

为什么它是这样的,我该如何改变它的工作,因为我想?

非常感谢。

回答

0

复制并粘贴?猜你想为语句2设置参数。

+0

谢谢!复制粘贴错误.. – limlim

0

您准备的声明是pstmt2。 您正在设置pstmt1上的属性。

尝试设置pstmt2上的属性,它应该可以工作。

0

虽然您在pstmt2上设置了属性,但您会得到异常,因为语句中只有三个占位符,并且您正在设置五个占位符。