所有的finally块均出现:finally block does not complete normallywhy?期待大虾指教!^_^
//本JavaBean包括数据的插入、更新、删除和查询等。package lee.javaBean;import java.sql.*;public class DBUtil
{
private DBLink dblink=new DBLink();
private Statement stmt;
private ResultSet rs;  
//获取查询的行数:没有结果返回-1,查询异常返回-2;
 
public int getRowCount(String strSql)
{
int intCount=0;
try{

stmt=dblink.getStmtread();
rs=stmt.executeQuery("SELECT COUNT(*) FROM"+strSql);
if(rs.next())
{
intCount=rs.getInt(1);
}
else intCount=-1; 
}
catch(Exception e)
{
intCount=-2; 
}
finally
{
dblink.close();
return intCount;
}
}

//执行插入操作 
public int insert(String strSql)
{
int count=0;
stmt=dblink.getStmt();
try
{
count=stmt.executeUpdate(strSql);
 
}
catch(Exception e)
{
count=-2;
System.err.println(e.getMessage());
e.printStackTrace();
}
finally
{
dblink.close();
return count;
}

}

//更新数据库数据
public int update(String sql)
{
int count=0;
stmt=dblink.getStmt();
try
{
count=stmt.executeUpdate(sql);
}
catch(Exception e)
{
count=-2;
System.err.print(e.getMessage());
e.printStackTrace();
}
finally
{
dblink.close();
return count;
}

}


//删除数据库数据

public int delete(String sql)
{
int count=0;
stmt=dblink.getStmt();
try
{
count=stmt.executeUpdate(sql);
  
}

catch(Exception e)
{
count=-2;
System.err.println(e.getMessage());
e.printStackTrace();

}

finally
{
dblink.close();
return count;
}



}











}

解决方案 »

  1.   

    Google一下,看到的解释 贴上来分享1.其实遇到的不是error , 而是" Warning ",警告,你不理它,compile其实是有过的,也可以正常执行。 2. 这样的情况在jdk 1.3 和 1.4处理的状况不同,1.3不给予警告,1.4会给予警告。所以小高在重灌的时候,版本可能有变,造成警告句不產生,或是下命令列的时候,有调整到某些参数导致。 3.在finally裡去return 是OK ,但是不是建议的行為,在早期的语言中,回传某些特殊值或是flag,然后假设使用者会检查,或是接受,或是处理,这样反而造成反多麻烦,例外补抓的精神,就是丢出适当的例外状况,由外部的context去处理…而非特殊数字,例如 -1 , false之类的 (虽然呼叫者仍能收到死亡前最后的吶喊),而呼叫者替每一种可能发生的例外採取补抓的后续行為,当然也可以只补抓Exception来偷懒。 4.finally做的东西,应该像是close之类的释放,例如在使用JavaExcel api的时候,可能发生了某些错误,若不在 finally中去把xls关掉,作业系统中会发现档案被锁住了,直到你把program stop才会解决…主要是在做善后的工作,要return 也是可以,但不是建议的状况,你可以试著写写看a呼叫b,然后b在finally中去return 一个整数,在a中去印印看,还是可以印出来的。 
      

  2.   

    return在finally中会导致异常丢失
    try-catch语句块就会失去控制