如何避免此SQL异常?

时间:2012-03-14 23:18:09

标签: java sql eclipse jdbc

我有一个DBconnector类,我写过。这是使用它具有的插入查询方法的实例。暂时忽略查询:

ResultSet NewCustomer = db.executeInsert("SELECT s Bookings VALUES (surnameOut,'Nilsen', 'Johan', 'Bakken 2', 'Stavanger')");

此时上面的行收到“未处理的异常类型SQLException”错误。它建议我用try / catch语句包围上面的内容,或者给出保持代码抛出异常的方法。我希望有一些方法可以从DBconnector类中对它进行排序,这样我就可以维护很小的单行来执行SQL查询。这可能吗?

以下是方法executeInsert方法的代码:

public ResultSet executeInsert(String query)throws SQLException {
        Statement s = null;
        ResultSet rs = null;
        try{
            s = con.createStatement();
            s.executeQuery(query);
            rs = s.getResultSet();
        }
        catch(SQLException e){}
        return rs;
    }

3 个答案:

答案 0 :(得分:5)

  

我希望有一些方法可以在DBconnector类中对其进行排序,这样我就可以维护很小的单行来执行SQL查询。

那么当你遇到一个破碎的查询时,你想要会发生什么?(例如,因为你试图执行一个实际选择的插入)。您真的想要完全忽略失败,甚至没有记录它,就像您当前的方法一样吗?那几乎永远不会正确的方法。在许多情况下,如果数据库查询失败,您应该中止正在进行的操作 - 异常应该将堆栈冒泡到某个高级别的“工作单元”,无论是请求,用户操作还是其他任何内容。

Java检查异常的原因正是强制你要考虑如何处理错误 - 所以不要忽略它,真的认为你是什么d喜欢发生...如果这个方法没有足够的上下文(它可能没有),你应该让异常冒泡,并强制调用者思考。 / p>

答案 1 :(得分:2)

这是(基本上)旧的检查异常参数 - 有些人喜欢它们,有些人讨厌它们(见here)。

我,其中一个,不喜欢检查异常(不同意Skeet先生@ 415k的声誉吗?),所以当我被迫处理一个时,我通常会使用try / catch并将错误重新抛出为RuntimeException的自定义子类。不需要显式处理RuntimeExceptions。

Spring是最常用的框架之一,采用这种方法。

但是,当您使用RuntimeExceptions时,请确保在某些时候您知道要处理该异常的位置。你永远不希望它一直到你的最终用户,让他们看到一个讨厌的堆栈跟踪。

答案 2 :(得分:0)

要回答您的问题,DBConnector中的方法明确表示它会抛出SQLException(即使它不是)。因为SQLException是一个经过检查的异常,所以你需要用它调用它来处理它。

听起来这不是你想要的情况。如果删除throws SQLException ,则可以编写微小的SQL代码。一定要接受其他答案的建议,因为你实际上忽略了可能不是一件好事的问题。