如何使用 JDBC 获取正在运行的语句列表

Posted

技术标签:

【中文标题】如何使用 JDBC 获取正在运行的语句列表【英文标题】:How to get a list of running statements using JDBC 【发布时间】:2016-10-05 13:38:22 【问题描述】:

我正在使用 DBCP 和 JDBC 进行一些数据移动。有时,当某些查询运行时间过长时,应用程序可能会被杀死;但是,如您所知,虽然应用程序被杀死,但已经发送到数据库的语句并没有被杀死。有没有办法在终止应用程序之前找到正在运行的查询列表并取消它们?

我知道您可以从数据库端获取正在运行的查询列表并终止查询,但这不是我想要的方式。我想通过 JDBC 找到应用程序(连接到数据库的指定用户帐户)发出的正在运行的查询(语句)列表,并使用 statement.cancel() 中止查询。

【问题讨论】:

【参考方案1】:

JDBC API 不提供任何方法来获取所有Statement 对象的列表,无论是运行还是其他。但是,您可以自己跟踪所有 Statement 对象。例如,您可以使用WeakHashMap<Statement, Statement> 来保存现有的Statement 对象,以避免内存/资源泄漏。

另一种可能性是使用Connection.abort(...)

【讨论】:

以上是关于如何使用 JDBC 获取正在运行的语句列表的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 NamedParameterJDBCTemplate 中的字符串列表来获取结果

如何使用一个 JDBC 驱动程序提供多个数据库的列表

如何使用 java JDBC 获取 MySql 的数据库“模式”名称列表

如何使用 PowerShell 或 VBScript 获取正在运行的应用程序列表

如何在执行 JDBC 语句时收集警告/通知?

如何获取系统上正在运行的进程列表并按各种参数对其进行排序