gpt4 book ai didi

java - 选择性捕获可关闭资源

转载 作者:行者123 更新时间:2023-12-01 19:55:12 25 4
gpt4 key购买 nike

这更多的是语法/结构问题。我正在使用 JDBC:StatementResultSet,这意味着 SQLExceptions 到处都会被抛出。

我的代码如下所示:

private static final String MY_QUERY = "SELECT * FROM MY_TABLE";

public void lookAtMetadata() throws SQLException {
try (Statement myStatement = getStatement)
{
try (ResultSet myResultSet = myStatement.executeQuery(MY_QUERY))
{
ResultSetMetadata metadata = myResultSet.getMetaData();
// do other stuff with metadata
}
}
}

到目前为止一切顺利。但我想在 myStatement.executeQuery(MY_QUERY) 失败时抛出一个特殊的异常,如下所示:

ResultSet myResultSet = null;
try
{
myResultSet = myStatement.executeQuery(MY_QUERY);
// get metadata and do stuff
} catch (SQLException e)
{
throw new MySpecialException(e);
} finally
{
if (myResultSet != null) myResultSet.close();
}

问题是,涉及 ResultSetMetaData 的其他操作也可能抛出 SQLException,而我不想用 MySpecialException 包装这些操作。

有没有一种方法可以让我只捕获来自查询执行的SQLException,并让其他SQLException抛出给方法调用者?我还想正确关闭 ResultSet

最佳答案

使用嵌套的 try 结构,内部 try 仅包装 executeQuery。将 catch 处理程序添加到此内部尝试中。让外部 try 不带 catch 处理程序,以便它将按原样传播所有其他 SQLExceptions

ResultSet myResultSet = null;
try
{
try {
myResultSet = myStatement.executeQuery(MY_QUERY);
} catch (SQLException e) {
throw new MySpecialException(e);
}
// get metadata and do stuff
} finally
{
if (myResultSet != null) myResultSet.close();
}

关于java - 选择性捕获可关闭资源,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49885867/

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