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

执行简单SELECT查询报java.sql.SQLException第3位存在不支持SQL92令牌错误

报错原因
  • 最核心的诱因是你查询的字段名contract属于当前使用数据库的SQL92保留关键字,语法解析时将该字段名识别为非法token,报错位置3对应SQL解析后的语法单元位置,正好落在contract字段定义的区间。
  • 次要可能是sql.properties配置文件中FETCH.CONTRACT的配置值前后存在不可见特殊字符(比如复制粘贴带入的零宽空格、换行符、多余转义符),导致读取到的SQL字符串不符合语法规范。
  • 也有可能是JDBC驱动版本与数据库版本不匹配,或者连接池开启了严格SQL92语法校验规则,对兼容语法的支持度不足。
解决方案
  • 优先处理保留关键字冲突:给字段名加上对应数据库的标识符包裹符,MySQL使用反引号,Oracle、PostgreSQL使用双引号,修改后的SQL如下:
-- MySQL版本
SELECT `contract` FROM contract_table
-- Oracle/PostgreSQL版本
SELECT "contract" FROM contract_table

同步修改sql.properties中的FETCH.CONTRACT配置值即可。

  • 清理配置文件内容:删除sql.properties中FETCH.CONTRACT的整行配置,手动重新输入配置内容,避免隐藏特殊字符的影响,同时确认配置文件编码为UTF-8无BOM格式。
  • 校验依赖版本匹配:确认使用的JDBC驱动版本与数据库大版本一致,关闭连接池中不必要的严格SQL语法校验规则。
  • 代码优化(可选):你已经引入了Spring JdbcTemplate,无需手动管理连接、Statement、结果集资源,直接使用封装好的query方法即可,避免资源泄露风险,修改后的代码示例:
public List<ContractEntity> getValue(){
    return jdbc.query(fetchContract, new BeanPropertyRowMapper<>(ContractEntity.class));
}

内容的提问来源于stack exchange,提问作者Nismath vi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 21:54:04