gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:44:55 24 4
gpt4 key购买 nike

在我的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com