PreparedStatement的JDBC错误

时间:2011-12-12 12:54:45

标签: java

我正在尝试编写一个获取id u(整数)的小函数,并返回距离< = 3的朋友数量(朋友信息存储在表格中喜欢:喜欢(uid1,uid2)意思是:uid1喜欢uid2)。
我写了这个简单的查询:

   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是传递给函数的整数 所有这些代码都在'try'块中。当我尝试运行它时,它打印第一个打印输出(“2”),但不打印第二个打印输出(“3”),我收到以下异常消息:
列索引超出范围:3,列数:2。

为什么会这样,我怎样才能改变它按照我的意愿工作?

非常感谢。

3 个答案:

答案 0 :(得分:0)

您准备好的陈述是pstmt2。 您正在pstmt1上设置属性。

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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