【发布时间】:2020-01-23 20:21:11
【问题描述】:
如果我尝试通过 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)。”
【问题讨论】:
-
为什么不使用
st.setDate()? -
?/0/?和?/31/?不是参数标志的有效使用。它只知道userid = ?这就是st.setInt(2, year)抛出Parameter index out of range的原因。正如 Nexevis 所说,您可以使用完整的Date对象并将它们设置为以下查询的参数:SELECT * FROM timestamp WHERE stampTime BETWEEN ? AND ? AND userid = ? -
谢谢你解决了我的问题。 xtratic 祝你有美好的一天
标签: java mysql sql jdbc glassfish