You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 15:36:08