gpt4 book ai didi

java - JDBC 结果集关闭

转载 作者:行者123 更新时间:2023-11-30 07:37:41 25 4
gpt4 key购买 nike

我正在分析我的 Java 应用程序并发现了一些关于 jdbc PreparedStatement 调用的有趣统计数据:

下面是环境的详细信息:数据库:Sybase SQL Anywhere 10.0.1驱动:com.sybase.jdbc3.jdbc.SybDriver连接池:c3p0JRE:1.6.0_05

问题代码如下:

try {
ps = conn.prepareStatement(sql);
ps.setDouble(...);
rs = ps.executeQuery();
......

return xyz;
}
finally {
try {
if (rs != null) rs.close();
if (ps != null) ps.close();
}
catch (SQLException sqlEx) {

}
}

从 JProfiler 统计数据中,我发现仅这个特定的 resultspace.close() 语句就需要花费大量时间。它从 25 毫秒到 320 秒不等,而对于其他性质相同的代码块,我发现这需要接近 20 微秒。

为了确定,我多次运行此性能测试并确认了此数据。我对这种行为感到困惑 - 想法?

最佳答案

此性能是特定于 JDBC 驱动程序的。 C3P0 连接池应该不会对其产生任何影响。我建议使用更新的或其他 JDBC 驱动程序重新测试它。 Sybase 驱动程序的替代方案是 jTDS driver .与 Sybase 驱动程序相比,我不确定它的性能如何,但众所周知,与 Microsoft 自己的 MSSQL JDBC 驱动程序相比,它的性能非常

与实际问题无关,实际上你应该在各自的 try block 中调用 close() 方法,否则不能保证它们会 全部关闭。如果第一次关闭抛出 SQLException,则不会执行后续的关闭调用。 Apache Commons DbUtils可能有助于去除样板代码。

关于java - JDBC 结果集关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2503622/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com