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

如果我尝试通过 Java (jdbc) 从 mySql 数据库获取时间戳(日期对象),我会收到错误:“参数索引超出范围(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)”。


largeQ
浏览 159回答 1
1回答

慕标5832272

当问号?是字符串文字的一部分时,不会将其解释为参数指示符。这就是为什么里面的问号'?/0/? 00:00:00.00'和'?/31/? 23:59:59.999'不被算作准备好的语句的参数;只计算?内部userid = ?,因为它是唯一“露天”的。您可以通过在 Java 程序中构造范围的结束日期并将它们绑定到stampTime BETWEEN ? AND ?条件内的参数来解决此问题。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java