使用有效查询字符串的PreparedStatement MySQLSyntaxErrorException

时间:2014-11-21 13:55:08

标签: java mysql exception jdbc

我花了好几个小时看着什么似乎应该是完美的代码。这个方法的connection.createStatement()版本工作正常,但是一旦我尝试将其转换为更好的connection.prepareStatement()版本,它就会抛出MySQLSyntaxErrorException并抱怨'附近的问题?&# 39;我的查询字符串中的字符。代码发布在下面,我根本看不到它的问题。数据库字段是VARCHAR并接受字符串,因此不是问题。

    public Discussion getDbDiscussionInstance(String _instanceId) throws SQLException {

    String qryStr = null;
    PreparedStatement myStmt = null;
    ResultSet myRs = null;

    // Try to build the object with existing data.
    try {
        qryStr = "SELECT assignment_id, discussion_id, section_id, user_id, circle_id, breakout_id, title, description, created, due FROM macb_discussions WHERE instance_id=?";
        myStmt = connection.prepareStatement(qryStr);
        myStmt.setString(1, _instanceId);
        myRs = myStmt.executeQuery(qryStr);
        if (rs.next()) {
            this.discussionId = myRs.getString("discussion_id");
        }
    } catch (SQLException e) {
        dbFunc.catchSQLException(e);
    } finally {
        myRs.close();
        myStmt.close();
    }
}

2 个答案:

答案 0 :(得分:2)

在没有参数的情况下仅使用myStmt.executeQuery();,您已经准备好了语句

答案 1 :(得分:0)

来自文档,

Statement.executeQuery(String sql)

PreparedStatement.executeQuery()

因此,相应地改变你的功能。  myStmt = connection.prepareStatement(qryStr);

 myStmt = connection.prepareStatement();