我在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驱动程序中的某种错误吗?请帮忙。
答案 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();