使用OJDBC进程是否使用isValid方法检查连接是否仍然存在?我试图找出它可能对数据库产生的影响以及这个过程有多重。例如它是否请求一个列,或只是用几个字节的数据ping数据库。
答案 0 :(得分:6)
每个供应商以不同方式实现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;
}
我相信其他供应商会做类似的事情。
答案 1 :(得分:1)
对于Oracle JDBC瘦驱动程序,isValid()的作用取决于驱动程序的版本和数据库。从11g开始,JDBC瘦驱动程序使用OPING,这是一个非常轻量级的RPC(尽可能小的往返)。在11gR2之前,驱动程序正在执行更昂贵的SELECT查询。数据库也是10g之前,然后OPING不受支持,驱动程序执行SELECT查询。