【问题标题】:Checking sql errors/exceptions检查 sql 错误/异常
【发布时间】:2016-08-17 22:25:49
【问题描述】:

我在使用java的时候经常看到这样的代码:

try {
    // any CRUD operation
} catch(SQLException e) {
    // do some specific database error stuff
    // if we're in a transaction, we usually rollback
    try {
        // rollback the transaction
    } catch(anotherException e) {
        // do some specific rollback error stuff
    }
}

只有当我的代码有问题时,我才会遇到 sql/database 错误。执行 SQL 操作并在它们周围放置 try catch 似乎非常非常重复。

由于在服务器端验证用户输入是一种很好的做法,除了在应用程序启动时连接到数据库之外,还需要捕获数据库异常吗?

【问题讨论】:

  • 编程是非常非常重复的。您可能还应该有一个 finally 块。

标签: sql database exception-handling crud


【解决方案1】:

更多关于戈登回答的问题的答案。但是评论太多了。

您对异常的处理取决于异常的级别。用户并不真正关心错误是来自服务器还是客户端。他们所关心的只是它不起作用。

如果您可以优雅地处理它,那么以一致的方式向用户发出警告消息。可以在同一个页面,另一个页面,弹出……可以继续。超时是非严重错误的一个示例。

如果是致命错误,则以一致的方式再次向用户发送致命错误消息并关闭应用程序。通常告诉他们致电技术支持。正确,用户不喜欢看到严重错误消息,但这比应用程序崩溃要好。

一个好的做法是将异常、内部异常、时间和用户 ID 写入数据库,以便更好地处理它。东西将在测试和生产中突破。如果没有良好的异常处理,就很难追踪和修复错误。我认为直接做这件事的工作量更少。如果它是一个扔掉的实用程序,那就是另一回事了。

【讨论】:

    【解决方案2】:

    当访问任何外部软件系统时,您应该检查错误,这只是一个好习惯。尽管“正常”操作可能不会产生错误,但您可能会因为其他原因而出错。例如:

    • 数据库服务器断开连接。
    • 数据库/模式/表不再可用。
    • 查询生成超时。
    • 数据库日志已满。

    如果基础数据库发生更改,您也可能会收到错误消息。例如:

    • 列类型可能会改变。
    • 列名可能会改变。
    • 表名可能会改变。

    重点是:要么编写一次性的一次性代码,要么编写可持续的代码。如果是后者,那么您应该检查潜在的错误。 try/catch 块是负责任的编程和良好实践的标志。它们并不杂乱。

    【讨论】:

    • 优点。如果我的应用程序中出现此类错误,我应该为此编写一个单独的错误页面,因为这些错误来自服务器,对吧?
    • @morbidCode 。 . .可能是这样的——你需要决定如何处理错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-03-10
    • 1970-01-01
    • 2013-12-27
    相关资源
    最近更新 更多