2015-10-26 3 views
0

У меня есть следующий код в классе DAO:com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException с PreparedStatement

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 Workbench, но бросает исключение с помощью JDBC. Это какая-то ошибка в драйвере mysql jdbc? Пожалуйста помоги.

ответ

0

Ваша проблема заключается в: - ResultSet rs = pstmt.executeQuery(SQL_TEXT);

Изменить его: - ResultSet rs = pstmt.executeQuery();

0

Вы уже создали PreparedStatement с параметром, содержащим запрос (SQL_TEXT), вам не нужно его снова называть.

ResultSet rs = pstmt.executeQuery(SQL_TEXT); 

Когда вы сделаете это, вы выполняете SQL_TEXT без установки переменной в ?, поэтому ваш запрос, содержащий знак опроса, который не распознается по MySql. Вы просто должны сделать:

ResultSet rs = pstmt.executeQuery(); 

Потому что вы установите SQL_TEXT в

PreparedStatement pstmt = conn.prepareStatement(SQL_TEXT); 
Смежные вопросы