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

问题描述

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

我在互联网上找不到适合我的解决方案,因为(我认为)sql-query 是正确的,并且我放置了“?”的确切数量 需要。

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)”。

标签: javamysqlsqljdbcglassfish

解决方案


当问号?是字符串文字的一部分时,它们不会被解释为参数指示符。这就是为什么问号在里面'?/0/? 00:00:00.00'并且'?/31/? 23:59:59.999'不被算作准备语句的参数;只计算?内部userid = ?,因为它是唯一一个“开放”的地方。

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


推荐阅读