Java 可关闭资源的选择性捕获
这更像是一个语法/结构问题。 我正在使用JDBC:Java 可关闭资源的选择性捕获,java,checked-exceptions,autocloseable,Java,Checked Exceptions,Autocloseable,这更像是一个语法/结构问题。 我正在使用JDBC:语句和结果集,这意味着到处都会抛出SQLExceptions 我的代码如下所示: private static final String MY_QUERY = "SELECT * FROM MY_TABLE"; public void lookAtMetadata() throws SQLException { try (Statement myStatement = getStatement) { try (ResultS
语句
和结果集
,这意味着到处都会抛出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(我的查询)
失败时,我想抛出一个特殊异常,如下所示:
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
,并让其他SQLExceptions
抛出给方法调用方?我还想正确关闭ResultSet
使用嵌套的try结构,内部try仅包装executeQuery
。将catch处理程序添加到此内部try。不使用catch处理程序保留外部try,这样它将按原样传播所有其他SQLException
s
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();
}
使用嵌套的try结构,内部try仅包装
executeQuery
。将catch处理程序添加到此内部try。不使用catch处理程序保留外部try,这样它将按原样传播所有其他SQLException
s
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();
}