JDBC执行MySQL SELECT提示SQLSyntaxErrorException语法错误求助
错误原因
你调用PreparedStatement的executeQuery方法时,错误传入了原始的SQL字符串参数:
ResultSet rs = pstmt.executeQuery(sql);
PreparedStatement在创建时已经绑定了带占位符?的SQL语句,且你已经通过setLong完成了占位符的参数赋值。如果调用执行方法时再传入原始SQL,JDBC会直接执行未替换占位符的原始语句,自然会识别到?是非法语法,抛出对应报错。
修复方案
将执行代码改为调用无参的executeQuery方法即可:
// 去掉传入的sql参数 ResultSet rs = pstmt.executeQuery();
额外注意点
你代码中查询的列名是CELULAR_USUARIO,但后续取值时用的是rs.getString("CELULAR"),列名不匹配会抛出找不到列的报错,需要统一列名:
- 方案1:修改SQL查询列别名
String sql = "SELECT CPF_USUARIO, NOME_USUARIO, LOGIN, " + "DATA_NASCIMENTO, EMAIL, CELULAR_USUARIO AS CELULAR, " + "DATA_CADASTRO, HORA_CADASTRO, GENERO " + "FROM TICKETERIA.TB_USUARIO " + "WHERE CPF_USUARIO = ?;";
- 方案2:修改取值时的列名
usuarioResult.setCelular(rs.getString("CELULAR_USUARIO"));
内容的提问来源于stack exchange,提问作者Gabriel Cardoso
相关产品推荐
相关产品推荐

