在以下代码段中,
try
{
Statement stmt = conect.getConnection();
stmt.executeUpdate(query);
}
catch(SQLException e)
{
//handle exception
}
finally
{
try{ stmt.close(); }
catch(SQLException ignore){}
}
执行stmt.close();时finally块中发生异常时会发生什么? 有没有更好的方法来处理这类问题?
答案 0 :(得分:3)
有时连接因为某些异常而未打开,但最终阻止关闭该连接。要避免此异常,请查看以下代码。
try{
Statement stmt = conect.getConnection();
stmt.executeUpdate(query);
}catch(SQLException e){
//handle exception
}finally{
try{
if(stmt != null){
stmt.close();
}
}
catch(SQLException ignore){}
}
答案 1 :(得分:1)
finally
{
if( stmt != null ) {
try {
stmt.close();
}
catch(SQLException ex ) {
ex.printStackTrace();
}
}
}
答案 2 :(得分:1)
可能出现的问题是语句未关闭,然后在尝试重用时会出错。
尝试:
Statement stmt = null;
try {
stmt = conect.getConnection();
stmt.executeUpdate(query);
}
catch(SQLException e) {
//handle exception
}
finally
{
try{ if(stmt!=null)stmt.close(); }
catch(SQLException ignore){}
}
答案 3 :(得分:0)
通常当发生异常时,我们将其包装在用户定义的异常上并抛出。
类似地,当最终也发生异常时,你需要抛出你自己的异常。
试 {
Statement stmt = conect.getConnection();
stmt.executeUpdate(query);
}
catch(SQLException e)
{
//handle exception
throw MyOwnException(e,"My message");
}
finally
{
try{ stmt.close(); }
catch(SQLException ignore)
{
throw MyOwnException(ignore,"My message");
}
}