【问题标题】:Manage Exceptions in Java在 Java 中管理异常
【发布时间】:2011-09-26 16:02:05
【问题描述】:

我正在做一个小型数据库程序。

Connection connection = DriverManager.getConnection(..., ..., ...);

String createTable= "CREATE TABLE Employee ...";

try
{
    Statement stmt = connection.createStatement ();
    stmt.executeUpdate(createTable);
    stmt.close();
    connection.close ();
}
catch(Exception Ex)
{
    System.out.println("Erreur : " + Ex.toString());
}  

当你运行程序时一切都会好起来的,但是第二次你会得到这个异常:

重复的表名:员工

好的,我知道如何管理异常,但是如何管理每个可能的异常。喜欢:

IF 异常是重复错误THEN 显示自定义重复消息。

IF这是一个重复的主键THEN显示另一个错误信息等等。

谢谢。

【问题讨论】:

  • 与您的问题并不真正相关,但您应该在“finally”块中执行“close”操作。

标签: java sql database exception throw


【解决方案1】:

如果要处理特定异常,则需要多个 catch 语句。

try {
    // some code that may throw an exception
}
catch (DuplicateKeyException e) {
    // handle a duplicate key exception
}
catch (DuplicateTableException e) {
    // handle a duplicate table exception - note this probably isn't the correct exception, you'll need to look up what is actually thrown
}
catch (Exception e) {
    // handle all other exceptions in a non-specific way
}

【讨论】:

    【解决方案2】:

    您必须解析异常方法字符串以获取实际 SQL 异常的“子类型”:

     try {
       // ...
     } catch (SQLException e) {
      if (e.getMessage().toLowerString().contains("duplicate table name")) {
       // handle duplicate table name problem
      } else if ( /* ... */ ) {
       // ...
      }
     }
    

    【讨论】:

      【解决方案3】:

      如果您使用 Spring JDBC 库,它会为您进行一些异常翻译,因此您将获得(未检查的)异常,例如 DuplicateKeyExceptionTypeMismatchDataAccessException 等,您可以单独捕获这些异常。

      【讨论】:

        【解决方案4】:

        您还可以通过根据 SQLException 的错误代码定义特定行为来为您的 sql-exception 排序正确的错误处理。但请注意:错误代码是特定于实现的,这意味着例如 JavaDB 的一个错误代码如果来自另一个 dbms,则其含义不同。

        见 JAVA API 中的 SQLException.getErrorCode()

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多