如何修复:"Parameter index out of range (2 > number of parameters, which is 1)."

How to fix: "Parameter index out of range (2 > number of parameters, which is 1)."

如果我尝试通过 Java (jdbc) 从我的 mySql 数据库中获取时间戳(日期对象),我会收到错误消息:"Parameter index out of range (2 > number of parameters, which is 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();

我希望语句准备好并执行,但我收到错误 "Parameter index out of range (2 > number of parameters, which is 1)."

当问号 ? 是字符串文字的一部分时,它们不会被解释为参数指示符。这就是为什么 '?/0/? 00:00:00.00''?/31/? 23:59:59.999' 中的问号不算作准备语句的参数;只计算userid = ?里面的?,因为只有"in the open".

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