如何解决:“参数索引超出范围(2>参数数量,即1)。”

时间:2019-09-23 18:07:27

标签: java mysql sql jdbc glassfish

如果我尝试通过Java(jdbc)从mySql数据库中获取timeStamps(日期对象),则会出现错误:“参数索引超出范围(2>参数数量,即1)。”

我在互联网上找不到适合我的解决方案,因为(我认为)sql查询正确无误,并且我输入了确切的数字“?”需要。

PreparedStatement st = conn.prepareStatement("SELECT * FROM timestamp WHERE stampTime BETWEEN '?/0/? 00:00:00.00' AND '?/31/? 23:59:59.999' AND userid = ? ");
            st.setInt(1, month);
            st.setInt(2, year); //It crashes here
            st.setInt(3, month);
            st.setInt(4, year);
            st.setInt(5, uId);
            ResultSet rs = st.executeQuery();

我希望语句可以准备并执行,但是我收到错误“参数索引超出范围(2>参数数量,即1)。”

1 个答案:

答案 0 :(得分:2)

如果问号?是字符串文字的一部分,则不会被解释为参数指示符。这就是为什么'?/0/? 00:00:00.00''?/31/? 23:59:59.999'内的问号不算作准备好的语句的参数;仅计算?中的userid = ?,因为它是“公开”中唯一的一个。

您可以通过在Java程序中构造范围的结束日期并将其绑定到stampTime BETWEEN ? AND ?条件内的参数来解决此问题。