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

Ian*_*Ian 6 java sql database jdbc ojdbc

使用OJDBC进程是否使用isValid方法来检查连接是否仍然存在?我试图找出它可能对数据库产生的影响以及这个过程有多重.例如,它是否请求一个列,或者只是用几个字节的数据ping数据库.

Gri*_*aub 6

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

public boolean isValid(int var1) throws SQLException {
    return this.pingDatabase(var1) == 0;
}
Run Code Online (Sandbox Code Playgroud)

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;
}
Run Code Online (Sandbox Code Playgroud)

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