最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
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: 23505 和 ERROR: duplicate key value violates unique constraint)。
立即学习“Java免费学习笔记(深入)”;
- 适合日志记录和人工排查
- 不建议用于程序逻辑判断(易受本地化、格式变动影响)
遍历 SQLException 链获取完整错误信息
某些数据库操作(如批处理、存储过程)可能抛出多个嵌套异常,需用 getNextException() 遍历:
- 每个节点都可独立调用
getSQLState()和getErrorCode() - 示例:循环处理
SQLException链,避免只捕获第一个错误而遗漏根本原因
相关文章
- 以下哪种职业的执业人员具有审计签字权 蚂蚁新村今日答案2026.1.14 07-14
- 蚂蚁新村今日答案1.14 07-14
- 蚂蚁新村2026年1月14日答案最新 07-14
- 蚂蚁庄园小鸡答题今日答案2026年1月15日 07-14
- 蚂蚁庄园今日最新答案1.15 07-14
- 蚂蚁庄园今日答案最新2026.1.15 07-14