finally该什么时候用? 文件、数据库连接等资源最好都在finally里释放。最好是每次用完都马上释放,这样少占资源,在访问量大的系统里很有必要。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 finally 是要 保证不管出现什么情况都应该释放资源(主要是 可能出现异常或者return 语句太多了,放到 finally 中可以很好的整理代码的条理)。所以只要你有资源应该释放就放到 finally 中来。 完成后我都要加finally语句来释放呢?有没有必要-----------------------------------------------有必要 例如:public Collection getInfos(){ Collection list = new LinkedList(); try{ Class.forName("oracle.jdbc.driver.OracleDriver"); Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB", "scott", "tiger").newInstance(); Statement stmt = conn.createStatement(); String sql = "select ename from emp"; ResultSet rs = stmt.executeQuery(sql); while (rs.next()){ list.add(new String(rs.getString("ename")); } } catch (ClassNotFoundException cnfe){ cnfe.printStackTrace(); } catch (SQLException sqle){ sqle.printStackTrace(); } finally{ try{ if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException sqle2){ sqle2.printStackTrace(); } } return list;} try{ }catch(){}finally{} loveyt(咆哮的独角兽) 我用了你的finally{ try{ if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException sqle2){ sqle2.printStackTrace(); } }这个,但是为什么我的rs它说找不到 异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块。 而没有异常抛出,也会进入finally块。 楼上的朋友这个知识我当然知道,但现在为什么我的程序try { String condition = "select * from " + r; ResultSet rs = connect.executeQuery(condition); rs.last(); number = rs.getRow(); } catch (SQLException e) { System.out.println(e.getMessage()); } finally{ try{ if (rs != null) rs.close(); } catch (SQLException sqle2){ sqle2.printStackTrace(); } }用eclipse编译rs它说找不到 文件、数据库连接等资源都在finally里释放,少占资源,尤其在访问量大的系统里很有必要。 loveyt(咆哮的独角兽) 我用了你的finally{ try{ if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException sqle2){ sqle2.printStackTrace(); } }这个,但是为什么我的rs它说找不到依我估计,你的rs 是在IF语句里面定义的.如果想在finally里面释放资源,最好这个对象定义在CLASS.的FUNCTION里的全局范围.比如说: CLASS A下面有个B FUNCTION.那么:....pbulic void b(){ResultSet rs=null;try{...if(){rs=....//不能在这里面定义ResultSet rs=.....}}catch(){}finally{//这个时候就可以在FINALLY里面释放你想要的资源了. try{ if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException sqle2){ sqle2.printStackTrace(); } }}不知道你是不是这样定义的.finally如果不考虑资源占用的话,一般情况下可以不用.它的意思就是说:不管你操作有没有成功. TRY通过也好.CATCH到EXCEPTION也好.都要做如下操作. 有没有大神帮忙java jsp做个电子相册呀 求大虾指教~ struct2 Action 访问问题! hibernate关于查询语句问题 struts,spring的几个初级问题 图片是存入数据库还是存路径? [求助]请问论坛中的路径显示是怎么实现的???? 哪里有免费的jsp聊天室下载 javabean问题,各位前辈指点(菜鸟问题) log4j如何写数据到数据库 我靠,给个帮助 刚搜集到的 HTML Javascript 控件集 做得非常好 大数据量也没有问题 包含 可编辑表格 Tree可动态拖放 页签 Tab Control 动态 select
(主要是 可能出现异常或者return 语句太多了,放到 finally 中可以很好的整理代码的条理)。
所以只要你有资源应该释放就放到 finally 中来。
-----------------------------------------------
有必要
public Collection getInfos(){
Collection list = new LinkedList(); try{
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:oraDB", "scott", "tiger").newInstance();
Statement stmt = conn.createStatement();
String sql = "select ename from emp";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()){
list.add(new String(rs.getString("ename"));
}
}
catch (ClassNotFoundException cnfe){
cnfe.printStackTrace();
}
catch (SQLException sqle){
sqle.printStackTrace();
}
finally{
try{
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
catch (SQLException sqle2){
sqle2.printStackTrace();
}
} return list;
}
}catch(){}finally{}
try{
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
catch (SQLException sqle2){
sqle2.printStackTrace();
}
}
这个,但是为什么我的rs它说找不到
try {
String condition = "select * from " + r;
ResultSet rs = connect.executeQuery(condition);
rs.last();
number = rs.getRow();
} catch (SQLException e) {
System.out.println(e.getMessage());
}
finally{ try{
if (rs != null) rs.close();
}
catch (SQLException sqle2){
sqle2.printStackTrace();
}
}
用eclipse编译rs它说找不到
try{
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
catch (SQLException sqle2){
sqle2.printStackTrace();
}
}
这个,但是为什么我的rs它说找不到依我估计,你的rs 是在IF语句里面定义的.
如果想在finally里面释放资源,最好这个对象定义在CLASS.的FUNCTION里的全局范围.
比如说: CLASS A下面有个B FUNCTION.那么:....
pbulic void b()
{
ResultSet rs=null;
try{
...
if(){
rs=....
//不能在这里面定义ResultSet rs=.....
}
}catch(){}
finally{//这个时候就可以在FINALLY里面释放你想要的资源了.
try{
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
}
catch (SQLException sqle2){
sqle2.printStackTrace();
}
}}
不知道你是不是这样定义的.finally如果不考虑资源占用的话,一般情况下可以不用.
它的意思就是说:不管你操作有没有成功. TRY通过也好.CATCH到EXCEPTION也好.都要做如下操作.