gpt4 book ai didi

java - 在 Java 中处理数据库异常的更好方法

转载 作者:太空狗 更新时间:2023-10-30 01:59:24 26 4
gpt4 key购买 nike

哪个更好:针对那种情况的 ErrorCode 或 Exception?

我见过这两种错误处理技术。我不知道每种技术的优缺点。

public void doOperation(Data data) throws MyException {
try {
// do DB operation
} catch (SQLException e) {
/* It can be ChildRecordFoundException, ParentRecordNotFoundException
* NullValueFoundException, DuplicateException, etc..
*/
throw translateException(e);
}
}

public void doOperation(Data data) throws MyException {
try {
// do DB operation
} catch (SQLException e) {
/* It can be "CHILD_RECORD_FOUND, "PARENT_RECORD_NOT_FOUND"
* "NULL_VALUE_FOUND", "DUPLICATE_VALUE_FOUND", etc..
*/
String errorCode = getErrorCode(e);
MyException exc = new MyException();
exc.setErrorCode(errorCode);
throw exc;
}
}

对于第二种方法,错误代码检索表单配置文件。我们可以在SQL Vender Code的基础上添加Error Code

SQL_ERROR_CODE.properties

#MySQL Database
1062=DUPLICATE_KEY_FOUND
1216=CHILD_RECORD_FOUND
1217=PARENT_RECORD_NOT_FOUND
1048=NULL_VALUE_FOUND
1205=RECORD_HAS_BEEN_LOCKED

方法1的调用客户端

    try {

} catch(MyException e) {
if(e instanceof ChildRecordFoundException) {
showMessage(...);
} else if(e instanceof ParentRecordNotFoundException) {
showMessage(...);
} else if(e instanceof NullValueFoundException) {
showMessage(...);
} else if(e instanceof DuplicateException) {
showMessage(...);
}
}

方法2的调用客户端

    try {

} catch(MyException e) {
if(e.getErrorCode().equals("CHILD_RECORD_FOUND")) {
showMessage(...);
} else if(e.getErrorCode().equals("PARENT_RECORD_NOT_FOUND") {
showMessage(...);
} else if(e.getErrorCode().equals("NULL_VALUE_FOUND") {
showMessage(...);
} else if(e.getErrorCode().equals("DUPLICATE_VALUE_FOUND") {
showMessage(...);
}
}

最佳答案

我推荐使用 Spring 的 JDBCTemplate。它将大多数现有数据库的异常转换为特定的未经检查的异常,例如DataIntegrityViolationException。它还将在消息中包含原始 SQL 错误。

关于java - 在 Java 中处理数据库异常的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12492315/

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