我刚刚写了这行漂亮的代码。
if(sex.getErrorCode() == 1213) // deadlock
可怕的魔法数字。当然,我可以编写我自己的所有幻数,但这不应该已经存在于某个地方吗?
不知道去哪里找——JDBC 不应该有 MySQL 的特定信息,而且我的文件中没有任何 MySQL 类,也不知道 MySQL jars。
MySQL Connector/J 的com.mysql.jdbc.MySQLErrorNumbers
类定义了一系列可以比较的常量SQLException.getErrorCode()
。例如:
if(e.getErrorCode() == MysqlErrorNumbers.ER_LOCK_DEADLOCK) { }
该列表在手册中有所记录。
不,Java 中没有保存 MySQL 错误编号的通用类。这是因为每个数据库供应商都有自己的错误代码,具有自己的含义。例如, 。可能在各自的 jar 中有一个常量类。
正如@MarcB 所指出的,您可以使用代表每个错误的常量创建自己的类,这些常量基于此处的特定 MySQL 错误代码:服务器错误代码和消息。IMO 您应该根据要以特定方式处理的错误创建常量,而其他错误应使用通用方式处理。
您可以考虑使用Spring而不是直接使用 JDBC。Spring JDBC 模板实现了用于检查 SQL 状态代码、处理连接失败等的样板代码。它将一般SQLException
异常转换为适当的特定DataAccessException
异常。