早上好。 我在“table”类中有一个方法“insert”。 在这个方法中,我接受类的成员,然后使用preparedStatement在db上编写它们。 如果事情出错,“插入”会抛出一个SQLException。 这是来源:
public void insert() throws SQLException
{
PreparedStatement sqlCommand = null;
try
{
sqlCommand = this.db.prepareStatement(prepareInsertQuery());
sqlCommand.execute();
}
finally
{
if (sqlCommand!=null)
{
sqlCommand.close();
}
}
}
这是一个问题: 如果我放一个“catch SQLException”块,我必须处理INSIDE我的方法,我不想要它(我想在主程序中进行异常处理,用于记录)。 如果我没有输入“catch SQLException”,则会忽略该异常。
如何关闭sqlCommand但是如果我得到异常,那么传播它?
谢谢你!答案 0 :(得分:4)
您无需做任何其他事情。如果抛出异常,它已经传播到调用方法,因为你没有在这里捕获它。
答案 1 :(得分:0)
如果try
的主体生成未捕获的异常,则不会忽略该异常;相反,该方法将以该异常终止(除非finally
子句也生成异常,在这种情况下原始异常将丢失)。
如果您使用的是Java 7或更高版本,则应使用try-with-resources语法。这是可用的,因为PreparedStatement
实现了AutoCloseable
:
public void insert() throws SQLException
{
try (PreparedStatement sqlCommand = this.db.prepareStatement(prepareInsertQuery()))
{
sqlCommand.execute();
}
}