猿问

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

我目前有一个数据库类,其中包含我从 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来告诉成功和失败,但是还有其他方法吗?


守着星空守着你
浏览 96回答 1
1回答

慕尼黑的夜晚无繁华

我想到了用Consumer来告诉成功和失败,但是还有其他方法吗?你不需要赶上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 {        ...    }}在此上下文中可能存在一个合理的抛出异常。如果不是,请声明您自己的异常类。如果您认为调用者需要尝试从中恢复,则检查异常是合适的。否则使用未经检查的异常。要点是你的代码不应该捕获异常,除非它能够处理它。打印堆栈跟踪并继续执行很少是处理异常的正确方法。
随时随地看视频慕课网APP

相关分类

Java
我要回答