java - 如何在 spring Controller 中处理数据库特定异常

标签 java spring model-view-controller

在我的 Controller 中, 我调用多个数据库方法。 这些行需要存储在 oracle 和 postgres 中。 在这种情况下我应该如何处理异常; 重复、违反唯一约束异常等。

在代码中, 我处理与 oracle 和 postgres 相关的异常。 这段代码都是重复代码。 我如何使用通用代码处理这种情况。

在这种情况下处理异常的好方法是什么。

catch (Exception e) {
    if (e instanceof PSQLException || (e.getCause() != null && e.getCause().getMessage().contains("already exists"))) {
        String errMsg = e.getCause().getMessage();
        if (errMsg.contains("already exists")) {
            errMsg = errMsg.substring(errMsg.indexOf('"') + 1, errMsg.lastIndexOf('"'));
        }
        userResponse.setMessage("ExistedUser");
        userResponse.setValue(errMsg);
    } else if (e instanceof SQLIntegrityConstraintViolationException || e.getLocalizedMessage().contains("SQLIntegrityConstraintViolationException")) {
        userResponse.setMessage("Duplicate");
    }
}

最佳答案

看看 callback design pattern .基本上,您在代码中使用一个接口(interface)实例,它的实现处理您的异常/数据库事务。你可以有这样的东西:

public interface DatabaseQuery {
    public void execute();
}

public class OracleQuery implements DatabaseQuery {

@Override
public void execute() {
   //run query, catch exceptions etc.

}

}

public class PostgresQuery implements DatabaseQuery {

@Override
public void execute() {
   //run query, catch exceptions etc.

}

}

然后在您需要进行数据库事务处理的代码中,传入此接口(interface)的一个实例:

public class TestQuery {
    DatabaseQuery query;

    public TestQuery(DatabaseQuery query) {
          this.query = query;
    }

    public void SomeDatabaseStuff() {
        //some code
        // need to work with the db
        query.execute();
        //some more code
    }
}

您不必担心是 Oracle 还是 Postgres,实现会在幕后处理。

关于java - 如何在 spring Controller 中处理数据库特定异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56007535/

相关文章:

java - Java TCP/IP 套接字如何向应用程序报告传输成功或失败?

java - 在java中,如何将一个项目导入到另一个项目中而不将它们放在同一个(Eclipse)工作区中?

java - 无法延迟初始化角色集合。简单的 JPA findById

java - Spring Boot 应用程序不使用 Application.Properties 文件

ruby-on-rails - 如何重构多个模型中出现的方法?

mysql - ZF 最后插入的 ID 返回 '0'

java - 如何检查列是否包含和Id,然后在sql中更新它?

java - 方法开始延迟

java - RedisTemplate 保存多个键值对到哈希问题

java - Arraylist 不添加数据,调用时将我重定向到另一个页面