Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try
{
conn = geting the connection object ( using DriverManager.getConnection() method or using connection pool)
stmt = conn.createStatement ("select ...");
// some other logic here
}
catch (SQLException e)
{
// handling the exceptions
}
finally
{
}
这里我的问题是在关闭连接对象时,在以下情况下会出现什么问题。
>
假设没有发生异常,在try块中它会自动关闭连接对象。
try {
// same above code
stmt.close();
conn.close();
} catch(Exception ex) {
// handling the exceptions
} finally {
}
如果发生某些异常,它将转到catch块,在那里它将自动关闭连接对象。
try {
// same above code
} catch(Exception ex) {
// handling the exceptions
stmt.close();
conn.close();
} finally {
}
关闭finally块中的连接对象。
try {
// same above code
} catch(Exception ex) {
// handling the exceptions
} finally {
stmt.close();
conn.close();
}
注意:请不要说最后块中关闭连接对象很好。我知道那个。如果我在try块中保持关闭连接,接球块是否有任何问题请解释。
答案是‘我们必须在使用后关闭连接。’但实际的问题是,为什么我们在使用后必须关闭连接?。
1)当我们创建与远程数据库服务器(比如MySQL服务器)的连接时,它也会为您打开一个连接。由于数据库服务器端对允许的连接数量也有限制/配置。如果我们不从我们的端关闭连接,它将保持打开状态,这样不久之后,数据库服务器端的允许连接数将超过,我们将无法与该数据库建立进一步的连接。
2)在数据库服务器端自动释放连接时间设置。
如果我们不关闭终端的连接,并且在一定时间内不执行任何查询(因为我认为MySql中的默认时间设置是28800秒,也就是8小时,尽管我们可以更改它)它将自动从服务器端释放连接。
重要的当您的jdbc连接对象在数据库服务器端真正释放,并且您认为它仍然是连接的,因为您从未断开/关闭它,并且您试图使用语句对该连接执行查询时,在这种情况下会发生什么。真的很关键。
这就是为什么我们必须始终关闭连接并对连接的连接对象执行语句。
由于数据库正在消耗更多的资源,无论处理是否成功,始终建议在处理完成后关闭连接。
您说在try中添加conn.close()
,如果您的查询运行没有任何异常,这很好,如果您的查询有任何问题,连接不会关闭。因此,始终建议在最终块中关闭您的连接,无论是否发生异常,该块总是执行。此外,如果您尝试将关闭语句放在cat
块中,并且您尝试处理多个异常,则需要重复不推荐的代码。
建议在finally块中关闭连接,因为如果您有多个catch块(您应该这样做:您永远不应该捕捉泛型异常),您将不必重新编写结束语句。
无论发生什么,try
块都将始终在try
之后执行。因此,如果您收到NullPointerException
或您没有处理的其他异常,使用最终
块,您将确保您的资源已正确关闭。
但是,如果您使用的是java 7,我建议您使用try with resources块
问题内容: 使用JDBC连接池工具(如DBCP或c3p0)有什么好处? 如果只有 一个* 用户的 小型CRUD 应用程序,我们是否可以将 一个 连接会话创建为一个 单例 ? * PS :我正在构建一个带有小型数据库(5个表)的小型后端应用程序。 问题答案: 从Jon Skeet的答案到连接和语句池的好处是什么?: 创建到数据库服务器的网络连接是(相对)昂贵的。同样,要求服务器准备SQL语句(相对)
问题内容: 大多数情况下,我看到的finally块仅用于 我的问题是,如果f的范围以封闭块结尾,为什么我们需要在finally中将其关闭? 问题答案: 因为垃圾回收与资源清理 不是 一回事。 例如,如果您有一个超出范围的JDBC连接对象,则没有信号发送到数据库服务器以指示不再需要打开的游标和连接。没有这些消息,您最终将耗尽可用的游标和连接数。 与文件句柄和任何其他资源相同。自己清理后。
问题内容: 在Golang中,我们将结构体与接收器方法结合使用。到这里为止一切都很完美。 我不确定什么是接口。我们在结构中定义方法,如果要在结构上实现方法,则无论如何都要在另一个结构下再次编写该方法。 这意味着接口似乎只是方法定义,仅占用了页面上多余的空间。 有没有解释我为什么需要接口的示例? 问题答案: 接口太大了,不能在这里给出全面的答案,但是有些事情需要弄清楚它们的用途。 接口是一种 工具
问题内容: 我正在尝试使用H2OR内的库在具有7000万行和25个数字特征的训练集上使用随机森林分类模型。总文件大小为5.6 GB。 验证文件的大小为1 GB。 我的系统上有16 GB RAM和8核CPU。 系统成功读取了H2O对象中的两个文件。 然后,我给出以下命令来构建模型: 但是几分钟(不生成任何树)后,出现以下错误: “ .h2o.doSafeREST中的错误(conn = conn,h2
我正在尝试按照本教程实现nodejs mysql数据库。我知道 查询()是Pool.GetConnection()+Connection.Query()+Connection.Release()的快捷方式。 在本文中,数据库配置为: 这是可以用作: 但是,我真的不明白 如果使用pool会自动释放连接,为什么我们需要这样做呢?
问题内容: 我们使用JDBC的标准代码部分是… 问题1:使用连接池时,是否应该在最后关闭连接?如果是这样,合并的目的就不会丢失吗?如果不是,那么DataSource如何知道何时释放Connection的特定实例并可以重用?我对此感到有些困惑,任何指针都表示赞赏。 问题2:以下方法是否接近标准?看起来像是尝试从池中获取连接,并且如果无法建立DataSource,请使用老式的DriverManager