【发布时间】:2010-10-20 18:01:57
【问题描述】:
背景
在我当前的项目中——一个没有 GUI 前端的服务器产品,我正在尝试编写更好的错误处理支持。当前错误会输出到日志中,并且通常不会被用户读取。
我们使用 PostgreSQL 作为我们的数据库后端,并通过数据库池使用直接 JDBC 调用和 DAO 来访问它。大多数与数据库相关的异常都包装在一个通用的DatabaseException 类中,该类实现了RuntimeException,并尝试从传递的异常中提取调试和状态信息。在我们的特殊情况下,它将访问底层 PostgreSQL 数据库驱动程序 - PSQLException。到目前为止,这种方法在获取有关导致数据库错误的原因的更详细信息方面效果很好,下面描述了一个明显的例外。
此外,由于我们有非常具体的性能和遗留支持要求,我们有很多自定义 SQL magic,这使得跟踪堆栈跟踪需要更多时间但并非不可能或困难。
问题描述
我注意到当我们得到一个SQLException 作为错误的 SQL 语句的结果时,驱动程序的实现不会返回导致错误的 SQL 语句。经过一番搜索,我发现有一种方法可以在启动时将 PostgreSQL 驱动程序置于调试模式,并让它显示有关其内部查询的属性。但是,我们不希望在生产环境中以调试模式运行驱动程序(老实说,我一直无法弄清楚如何让它进入怪异模式!)。
问题
之前有没有其他人处理过同样的问题并找到了解决方案?如果没有,是否有一些 OOP 模式用于在执行之前存储查询信息,然后将该信息分配给引发的异常?还是大多数开发人员只是觉得他们不需要完整的查询来解决数据库问题?老实说,我不需要它,因为我有完整的堆栈跟踪,我可以查找调用查询,但它肯定会加快我的调试速度,因为它是我在错误日志。
【问题讨论】:
标签: java exception postgresql jdbc exception-handling