如何强制 DriverManager.getConnection() 方法调用超时?

2023-11-21

我有一个应用程序将与 MySQL 建立数据库连接并执行查询。有时,DriverManager.getConnection()方法调用需要2秒,有时需要30秒。有没有办法控制这个方法2秒后超时?

DriverManager.setLoginTimeout()似乎不起作用。

实际上,我可以设置超时statement.executeQuery()通过让线程休眠我的超时值并在唤醒后关闭连接。但它是连接建立部分,我无法真正设置超时。

将不胜感激任何帮助。


如果没有其他选项,您始终可以在单独的线程中执行该调用,如果该调用在 2 秒内未完成,则中止/忽略该调用。

EDIT这是我的想法的一个例子:

public class Dummy extends Thread {
private volatile Connection conn = null;
@Override
public void run() {
    try {
        this.conn = DriverManager.getConnection("foobar") ;
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
static public Connection getConnection() {
    Dummy d = new Dummy() ;
    d.start() ;
    try {
        Thread.sleep(2000) ;
    } catch (InterruptedException e) {}
    return d.conn ;
}
}

然后您可以在代码中的其他位置调用静态 Dummy.getConnection() 方法。一个缺点是该方法总是需要 2 秒,但是将其更改为在线程完成时立即返回并不太难。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何强制 DriverManager.getConnection() 方法调用超时? 的相关文章

随机推荐

  • 将包含日数据的 JFreeChart TimeSeries 系列转换为周或月数据?

    我意识到这可能是一个愚蠢的问题 并且我知道可以通过确定每个数据点所在的周或月等来完成 但是 我正在寻找一种避免编码的方法 如果它是在图书馆中完成的 大概所有的陷阱都得到了 我宁愿使用它 原始数据存储在Excel电子表格中 但我无法直接操作电
  • 输出原始图像流而不是 jpeg,动态调整图像大小

    我有一个 PHP 函数 可以动态调整图像大小以创建缩略图 我遇到了麻烦 因为它只是显示原始图像流而不是实际图像 我的代码使用一个名为缩略图的函数 thumbnail thumbnail item filename 209 137 image
  • PHP date('W') 与 MySQL YEARWEEK(now())

    有人可以解释一下为什么这两个给出不同的结果吗 我用 PHP 执行这个 date YW mktime 0 0 0 3 22 2013 outputs 201312 当我使用 MySQL 执行此操作时 SELECT YEARWEEK now o
  • HTMLUnit:执行速度超慢?

    我一直在使用 HTMLUnit 它非常适合我的要求 但似乎速度极其缓慢 例如 我使用 HTMLUnit 自动化了以下场景 Goto Google page Enter some text Click on the search button
  • Postgresql:带有转义换行符的 CSV 导出

    我使用此处发布的 所有 指令从 postgresql 数据库导出了一些数据 将 PostgreSQL 的 PL pgSQL 输出保存到 CSV 文件 但某些导出的字段包含换行符 换行符 因此我得到了一个 CSV 文件 如下所示 header
  • 调试的最佳实践

    最近 我使用 Visual Studio 和 WinDbg 对托管应用程序进行了大量调试 因此我经常被要求协助同事进行调试 有好几次我发现人们只是到处插入断点并希望得到最好的结果 根据我的经验 这很少是一种有用的技术 我的方法是这样的 重现
  • 通过 GraphQL API 显示超过 100 个条目

    我已经厌倦了使用 github grpahQL API 中的 endCursor 和 hasNextPage 进行分页来获取超过 100 个数据 我使用的查询是 query organization login XXX repository
  • 动态创建的元素上的事件绑定?

    这个问题的答案是社区努力 编辑现有答案以改进这篇文章 目前不接受新的答案或互动 我有一些代码 我循环遍历页面上的所有选择框并绑定 hover事件让他们在宽度上做一些调整mouse on off 这发生在页面准备好并且工作得很好 我遇到的问题
  • 获取调整大小的 html 图像元素的原始尺寸

    有没有一种简单有效的方法来获取显示在 JavaScript 中的图像的真实尺寸 在 JavaScript 中 img 具有可能不同渲染大小的元素 例如 通过max height or max width 有存在naturalWidth an
  • 使用 GraphicsEnvironment 取消注册字体?

    我最近发现了如何向本地 GraphicsEnvironment 注册 TTF 字体 对于我的用例 SVG 到 PNG 转码 Apache Batik 可能会识别该字体 import java awt Font import java awt
  • 运行 ASP.NET Web 应用程序时找不到 System.Runtime 4.1.0.0

    我使用以下projects json 创建了一个可移植类库 supports dependencies Microsoft CSharp 4 0 1 Microsoft NETCore Portable Compatibility 1 0
  • 使用 Visual Studio 在源代码中显示日语字体

    我有一些源文件 其中有用日语写的注释 当我在 Visual Studio 中打开这些文件时 它们显示如下 FNCAP p X b h 我使用的是英文版 WinXP 但是有没有办法让 Visual Studio 显示实际的日语字符而不是当前的
  • 将自定义模型绑定器应用于asp.net core中的对象属性

    我正在尝试为模型的 DateTime 类型属性应用自定义模型绑定器 这是 IModelBinder 和 IModelBinderProvider 的实现 public class DateTimeModelBinderProvider IM
  • 获取与 c# 中的 ProcessStartInfo 一起使用的可用动词(文件关联)列表

    我正在尝试使用 ProcessStartInfo 类打开和打印文件 文件可以是任何内容 但我们假设它是 PDF 文件 ProcessStartInfo pi new ProcessStartInfo file pi Arguments Pa
  • 更改 iOS 中禁用的栏按钮项目的颜色

    我需要在导航栏中显示我的应用程序的图标 为此 我将其添加为右栏按钮项目 我不希望它可点击 我只需要那里的图标 所以我将其设置为禁用 问题是图标显示为灰色 而不是绿色 有没有办法禁用此按钮但又保留其原始颜色 尝试这个 let barButto
  • wcf 测试客户端不支持此操作,因为它使用类型 system.object[]

    您好 在运行我的 wcf 服务时 出现错误 wcf 测试客户端不支持此操作 因为它使用类型 system object 我正在尝试检索正在运行的进程列表 ServiceBehavior InstanceContextMode Instanc
  • Windows UDP 套接字:recvfrom() 失败并出现错误 10054

    大家好 我正在尝试使用 Windows 套接字发送和接收 UDP 数据包 在 C 中 它一直运行良好 直到三天前程序停止正常运行 总结一下情况 当在我的套接字上调用 WSAPoll 时 即使没有启动服务器 它也总是返回用所有可能的 reve
  • 在 Perl 6 中继承私有属性

    我在文档中找不到任何内容 但似乎子类中无法访问其超类的私有变量 我对吗 class A has a class B is A has b method set a x a x my var B new var set a 5 say var
  • 使用 linq 表达式通过键列表过滤字典

    我有一本包含所有用户及其相应年龄的字典 Dictionary
  • 如何强制 DriverManager.getConnection() 方法调用超时?

    我有一个应用程序将与 MySQL 建立数据库连接并执行查询 有时 DriverManager getConnection 方法调用需要2秒 有时需要30秒 有没有办法控制这个方法2秒后超时 DriverManager setLoginTim