这更多是语法/结构问题。
我正在使用JDBC:Statement
和ResultSet
,这意味着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
,并让其他SQLExceptions
被抛给方法调用者?我还想妥善关闭ResultSet
。
答案 0 :(得分:3)
使用嵌套的try结构,内部try只包装executeQuery
。将catch处理程序添加到此内部try。保留外部try没有catch处理程序,以便它将按原样传播所有其他SQLException
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();
}