带有PreparedStatement的com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException

时间:2015-10-26 11:43:33

标签: java mysql jdbc

我在DAO类中有以下代码:

public boolean employeeExists(String employeeCode) throws InstantiationException, SQLException {
    String SQL_TEXT = "select count(*) from employee where emp_code=?;";

    int scalarValue = 0;

    Connection conn = DatabaseAccess.getConnection();
    PreparedStatement pstmt = conn.prepareStatement(SQL_TEXT);
    pstmt.setString(1, employeeCode);

    try {
        ResultSet rs = pstmt.executeQuery(SQL_TEXT);
        if (rs.next()) {
            scalarValue = rs.getInt(1);
        }
    } catch (SQLException e) {
        // TODO: log error.
        throw e;
    } finally {
        if (pstmt != null && !pstmt.isClosed())
            pstmt.close();
        if (conn != null && !conn.isClosed())
            conn.close();
    }
    return scalarValue > 0;
}

当我运行代码,即调用上面的DAO方法时,我收到以下错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '?'

语法似乎没问题并且在mysql工作台中执行但是使用JDBC抛出异常。 是mysql jdbc驱动程序中的某种错误吗?请帮忙。

2 个答案:

答案 0 :(得分:0)

您已使用包含查询的参数(SQL_TEXT)创建了PreparedStatement,您无需再次调用它。

ResultSet rs = pstmt.executeQuery(SQL_TEXT);

执行此操作时,您正在执行SQL_TEXT而不将变量设置为?,因此您的查询包含一个MySql无法识别的询问标记。你必须这样做:

ResultSet rs = pstmt.executeQuery();

因为您在

中设置了SQL_TEXT
PreparedStatement pstmt = conn.prepareStatement(SQL_TEXT);

答案 1 :(得分:0)

您的问题出在: - ResultSet rs = pstmt.executeQuery(SQL_TEXT);

将其更改为: - ResultSet rs = pstmt.executeQuery();