【问题标题】:using a try but still having a exception使用尝试但仍有异常
【发布时间】:2013-12-26 21:31:18
【问题描述】:

早上好。 我在“表”类中有一个“插入”方法。 在这种方法中,我获取类的成员,并使用preparedStatement 将它们写入数据库。 如果出现问题,我希望“插入”会抛出 SQLException。 这是来源:

public void insert() throws SQLException
    {

    PreparedStatement sqlCommand = null;
    try
        {
        sqlCommand = this.db.prepareStatement(prepareInsertQuery());
        sqlCommand.execute();
        }
    finally
        {
        if (sqlCommand!=null)
            {
            sqlCommand.close();
            }
        }
    }

这是一个问题: 如果我放置一个“catch SQLException”块,我必须在我的方法内处理异常,我不想要它(我想将异常处理放在主程序中,用于记录)。 如果我不放“catch SQLException”,异常将被忽略。

我怎样才能关闭 sqlCommand 但如果我得到一个异常,传播它?

谢谢!

【问题讨论】:

  • “异常将被忽略”是什么意思?如果try 的主体产生异常,那么整个方法将抛出相同的异常(除非finally 块抛出异常)。

标签: java exception


【解决方案1】:

您无需执行任何其他操作。如果抛出异常,它已经传播到调用方法,因为你没有在这里捕获它。

【讨论】:

  • OP 可能希望将sqlCommand.close() 语句包含在try/catch 中,以防止close 中的异常隐藏try 块主体中引发的异常。
【解决方案2】:

如果try的主体产生了未被捕获的异常,那么该异常不会被忽略;相反,该方法将以该异常终止(除非finally 子句也生成异常,在这种情况下原始异常将丢失)。

如果您使用的是 Java 7 或更高版本,则应该使用 try-with-resources 语法。这是可用的,因为PreparedStatement 实现了AutoCloseable

public void insert() throws SQLException
{

    try (PreparedStatement sqlCommand = this.db.prepareStatement(prepareInsertQuery()))
    {
        sqlCommand.execute();
    }
}

【讨论】:

    猜你喜欢
    • 2014-08-15
    • 1970-01-01
    • 1970-01-01
    • 2016-10-07
    • 2018-12-23
    • 2019-08-02
    • 2020-07-03
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多