如果我尝试通过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)。”
答案 0 :(得分:2)
如果问号?
是字符串文字的一部分,则不会被解释为参数指示符。这就是为什么'?/0/? 00:00:00.00'
和'?/31/? 23:59:59.999'
内的问号不算作准备好的语句的参数;仅计算?
中的userid = ?
,因为它是“公开”中唯一的一个。
您可以通过在Java程序中构造范围的结束日期并将其绑定到stampTime BETWEEN ? AND ?
条件内的参数来解决此问题。