gpt4 book ai didi

当发生 SQLException 时 Java 响应应用程序

转载 作者:行者123 更新时间:2023-12-02 01:23:06 25 4
gpt4 key购买 nike

我当前有一个数据库类,其中包含从 SQL 数据库检索数据的所有方法。方法如下:

@Override
public void setGlobalSetting(Setting setting) {
if(setting.getId() == 0) {
try {
PreparedStatement ps = this.conn.prepareStatement("INSERT INTO BotSettings(guildId, settingKey, settingValue) VALUES(?, ?, ?)");
ps.setLong(1, -1);
ps.setString(2, setting.getKey());
ps.setString(3, setting.getValue());

ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
} else {
try {
PreparedStatement ps = this.conn.prepareStatement("UPDATE BotSettings SET settingValue = ? WHERE guildId = ? AND settingKey = ?");
ps.setString(1, setting.getValue());
ps.setLong(2, -1);
ps.setString(3, setting.getKey());

ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}

问题是我无法告诉我的应用程序何时发生 SQLException,以便应用程序可以向用户响应应用程序无法保存数据。我怎样才能实现一种可以告诉应用程序失败的方法。我想到用Consumer来告诉成功和失败,但是还有其他方法吗?

最佳答案

I thought of using Consumer to tell success and failure, but are there other ways?

您不需要捕获SQLException。您可以想象允许它传播到可以适当处理它的更高级别。

或者,您可以抛出一个新的异常。例如:

public void setGlobalSetting(Setting setting) throws MyException {
if(setting.getId() == 0) {
try {
...
ps.executeUpdate();
} catch (SQLException e) {
throw new MyException("Cannot set setting due to database error", e);
}
} else {
...
}
}

在此上下文中可能存在一个合理抛出的异常。如果没有,请声明您自己的异常类。

如果您认为调用者需要尝试从中恢复,则检查异常将是合适的。否则使用未经检查的异常。

<小时/>

要点是您的代码不应该捕获异常,除非它能够处理它。打印堆栈跟踪并继续很少是处理异常的正确方法。

关于当发生 SQLException 时 Java 响应应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57343421/

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