一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Java中 SQLException 数据库操作失败报错怎样获取错误码

时间:2026-07-14 09:22:52 编辑:袖梨 来源:一聚教程网

SQLException 通过 getSQLState() 获取标准 SQLSTATE 码(如"23505"),跨数据库通用;getErrorCode() 返回厂商特定整数码(如 MySQL 1062);getMessage() 用于日志排查;需用 getNextException() 遍历异常链。

在 Java 中,SQLException 提供了标准方法获取数据库错误码,但具体含义和可用性取决于底层 JDBC 驱动和数据库厂商。

使用 getSQLState() 获取 SQL 标准状态码

这是最通用、跨数据库的方式,返回 5 位字符串(如 "23505"),遵循 SQL 标准(SQLSTATE)。多数主流驱动(PostgreSQL、H2、Derby)都支持,MySQL 8.0+ 也已支持。

  • 它比厂商错误码更可移植,适合做通用逻辑判断(例如唯一约束冲突通常是 "23505",外键违约为 "23503"
  • 调用方式:e.getSQLState(),其中 e 是捕获的 SQLException
  • 注意:部分旧版驱动(如老版本 MySQL Connector/J)可能返回 null 或占位符(如 "00000"),需实测验证

使用 getErrorCode() 获取数据库厂商错误码

返回整数,由具体数据库定义(如 MySQL 的 1062 表示重复键,PostgreSQL 的 0 常表示无厂商码)。该值意义完全依赖数据库文档。

  • MySQL:参考官方错误码列表(如 1062 = “Duplicate entry”)
  • PostgreSQL:实际返回的是 SQLSTATE 的十进制映射,通常不直接使用;建议优先看 getSQLState()
  • Oracle:返回 ORA-XXXXX 中的数字部分(如 1 对应 ORA-00001

查看原始错误消息辅助定位

e.getMessage()e.toString() 包含驱动生成的可读提示,常含 SQLSTATE 和厂商码(如 PostgreSQL 报错中会同时出现 SQLSTATE: 23505ERROR: duplicate key value violates unique constraint)。

立即学习“Java免费学习笔记(深入)”;

  • 适合日志记录和人工排查
  • 不建议用于程序逻辑判断(易受本地化、格式变动影响)

遍历 SQLException 链获取完整错误信息

某些数据库操作(如批处理、存储过程)可能抛出多个嵌套异常,需用 getNextException() 遍历:

  • 每个节点都可独立调用 getSQLState()getErrorCode()
  • 示例:循环处理 SQLException 链,避免只捕获第一个错误而遗漏根本原因

热门栏目