java - Connection.isValid(time) 实际上做了什么来检查连接是否有效?

标签 java sql database jdbc ojdbc

使用 OJDBC 进程是否使用 isValid 方法检查连接是否仍然存在?我试图弄清楚它可能对数据库产生什么影响以及这个过程有多繁重。例如它是请求一个列,还是只用几个字节的数据对数据库执行 ping 操作。

最佳答案

每个供应商以不同的方式实现 jdbc 方法。 例如 Oracle 的实现是:

public boolean isValid(int var1) throws SQLException {
    return this.pingDatabase(var1) == 0;
}

pingDatabase 简单地执行 select x from dual :

int doPingDatabase() throws SQLException {
    Statement var1 = null;

    byte var3;
    try {
        var1 = this.createStatement();
        ((oracle.jdbc.OracleStatement)var1).defineColumnType(1, 12, 1);
        var1.executeQuery("SELECT \'x\' FROM DUAL");
        return 0;
    } catch (SQLException var7) {
        var3 = -1;
    } finally {
        if(var1 != null) {
            var1.close();
        }

    }

    return var3;
}

我相信其他供应商也在做类似的事情。

关于java - Connection.isValid(time) 实际上做了什么来检查连接是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37972004/

相关文章:

java - 无法使用 JPA 删除表中的行而不引发异常

java - 支柱 2 : There is no Action mapped for namespace [/]

SQL Server 对象资源管理器不显示当前数据库

mysql - 比较MySQL表中同一列的属性

mysql - 检查字符串前 2 个字符的查询

c++ - 聚集键/值数据库 : most recent record

database - Redis 不保存数据

java - 当我从 struts2 操作的 js 函数中获取 JSONArray 时,它是空的,我不明白为什么

java - 未指定 Hibernate 方言

php - 如何从表单中获取表名值并将数据插入表中?