SQL参数超出索引错误

时间:2015-03-23 05:43:06

标签: java mysql

当我尝试执行这段代码时,我收到此错误。当我删除问号的引号时,它会说"你的SQL语法中有错误;" 有人可以帮我解决这个问题吗?

String query = "select date from ticket where date >='?' and date <= '?'  ";

        PreparedStatement pstmt1 =  con.prepareStatement(query);
        pstmt1.setString(1, fromdate);
        pstmt1.setString(2, todate);
        pstmt1.executeQuery(query);

3 个答案:

答案 0 :(得分:2)

此处您的实际错误是您正在执行查询字符串本身而不是准备好的语句:

pstmt1.executeQuery(query);

executeQuery(String)接口中没有PreparedStatement,而是从Statement接口恢复为?接口,该接口只是按原样运行字符串作为查询。这意味着它会痛苦地抱怨,因为在这种情况下ResultSet rs = pstmt1.executeQuery(); 被认为是无效的。

使用(包括检索结果集):

{{1}}

所以查询执行是在预准备语句上下文而不是语句上下文中完成的。

答案 1 :(得分:0)

请勿使用引号括起占位符

String query = "select date from ticket where date >='?' and date <= '?'  ";

java API将负责添加引号并将转义序列添加到特殊字符,这应该足够了:

String query = "select date from ticket where date >=? and date <= ?  ";

答案 2 :(得分:0)

setString(...) - &gt;的setDate(...)