2016-04-24 73 views
0

当我使用Java,我经常看到这样的代码:检查SQL错误/异常

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 /数据库错误时,有件事情很错我的代码。执行SQL操作并将尝试捕获到它们周围似乎非常重复。

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

+0

编程是非常非常重复的。你应该也可以有一个finally块。 – Paparazzi

回答

2

当访问任何外部软件系统,你应该检查错误,这只是一个良好的做法。尽管“正常”操作可能不会产生错误,但由于其他原因,您可能会收到错误。例如:

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

如果底层数据库发生变化,您也可能会遇到错误。例如:

  • 列类型可能会更改。
  • 列名可能会更改。
  • 表名称可能会更改。

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

+0

好点。如果在我的应用程序中发生这样的错误,我应该为此编写一个单独的错误页面,因为这些错误来自服务器,对不对? – morbidCode

+0

@morbidCode。 。 。可能是这样的 - 你需要决定你如何处理错误。 –

1

更多回答你的问题从戈登答案。但太多的评论。

您对异常所做的操作取决于异常的级别。用户并不在乎是否错误来自服务器或客户端。他们所关心的只是它不起作用。

如果您可以正常处理它,然后以一致的方式给用户一个警告消息。它可以在同一页面上,另一个页面弹出...可以继续。超时是非关键性错误的一个例子。

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

一个好的做法是将异常,内部异常,时间和用户ID写入数据库,以便更好地处理它。东西将在测试和生产中突破。如果没有良好的异常处理,追踪和修复错误就更加困难。我认为只要事先做好就不那么容易了。如果这是一个丢弃工具,那么另一件事。