gpt4 book ai didi

java - 如何使用 Java 中的 Postgres JDBC 驱动程序获取导致 SQLException 的 sql 语句?

转载 作者:搜寻专家 更新时间:2023-11-01 02:18:39 26 4
gpt4 key购买 nike

背景

在我当前的项目——没有 GUI 前端的服务器产品中,我试图编写更好的错误处理支持。错误目前被输出到日志中,用户通常不会阅读。

我们使用 PostgreSQL 作为我们的数据库后端,我们通过数据库池使用直接 JDBC 调用和 DAO 来访问它。大多数与数据库相关的异常都包含在一个通用的 DatabaseException 类中,该类实现了 RuntimeException 并尝试从传递的异常中提取调试和状态信息。在我们的特定情况下,它将访问底层的 PostgreSQL 数据库驱动程序 - PSQLException。到目前为止,这种方法在获取有关导致数据库错误的原因的更多详细信息方面效果很好,但有一个值得注意的异常(exception),如下所述。

此外,由于我们有非常具体的性能和遗留支持要求,我们有很多自定义 SQL 魔法,这使得以下堆栈回溯需要更多时间但并非不可能或困难。

问题描述

我注意到,当我们由于错误的 SQL 语句而得到 SQLException 时,驱动程序的实现不会返回导致错误的 SQL 语句。在做了一些搜索之后,我发现有一种方法可以让 PostgreSQL 驱动程序在启动时进入 Debug模式,并让它显示有关其内部查询的属性。但是,我们不希望在生产环境中以 Debug模式运行驱动程序(老实说,我一直无法弄清楚如何让它进入 freakin 模式!)。

问题

有没有其他人以前处理过同样的问题并找到了解决方案?如果没有,是否有一些 OOP 模式可以在执行前存储查询信息,然后将该信息分配给抛出的异常?还是大多数开发人员只是觉得他们不需要完整的查询来解决数据库问题?老实说,我不需要它,因为我有完整的堆栈跟踪,我可以查找调用查询,但它肯定会加快我的调试速度,因为它是我在错误日志。

最佳答案

每当出现 SQLException 时,我都会在我的自定义异常对象中添加 SQL 查询。在我在日志文件中记录异常详细信息的代码中,我也曾经记录过 SQL。

关于java - 如何使用 Java 中的 Postgres JDBC 驱动程序获取导致 SQLException 的 sql 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/771237/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com