黑马程序员技术交流社区

标题: 关于关闭数据库的流那个更好点~?有什么区别? [打印本页]

作者: CrazyProgram    时间: 2013-4-9 22:47
标题: 关于关闭数据库的流那个更好点~?有什么区别?
本帖最后由 CrazyProgram 于 2013-4-10 22:46 编辑

第一种方式:

  1. public static void free(ResultSet rs,Statement st,Connection conn){

  2. try{
  3. if(rs!=null){
  4. rs.close();
  5. }
  6. }catch(SQLException e){

  7. e.printStackTrace();

  8. }finally{
  9. try{
  10. if(st!=null){
  11. st.close();
  12. }
  13. }catch(SQLException e){

  14. e.printStackTrace();

  15. }finally{
  16. try{
  17. if(conn!=null){
  18. conn.close();
  19. //myDataSource.free(conn);
  20. }
  21. }catch(Exception e){

  22. e.printStackTrace();

  23. }

  24. }
  25. }
  26. }
复制代码
第二种方式:
  1. public static void close(ResultSet rs){
  2. if(rs!=null){
  3. try {
  4. rs.close();
  5. } catch (Exception e) {
  6. e.printStackTrace();
  7. }
  8. }
  9. }
  10. public static void close(Statement stmt){
  11. if(stmt!=null){
  12. try {
  13. stmt.close();
  14. } catch (Exception e) {
  15. e.printStackTrace();
  16. }
  17. }
  18. }
  19. public static void close(Connection conn){
  20. if(conn!=null){
  21. try {
  22. conn.close();
  23. } catch (Exception e) {
  24. e.printStackTrace();
  25. }
  26. }
  27. }
复制代码

作者: 胡国彬    时间: 2013-4-10 20:24
一般开发中,最多使用的是第一种
这种方式有一个优势,就是,即便前面的rs或者st关闭的时候出现了异常,后面的conn仍然能够正常关闭,因为java的异常处理机制是,finally语句块中的代码,不管有没有异常,最终都会执行的.

而第二种方式的话,如果有一个发生异常,剩下的就不能正常关闭,这就是区别.
作者: CrazyProgram    时间: 2013-4-10 22:46
胡国彬 发表于 2013-4-10 20:24
一般开发中,最多使用的是第一种
这种方式有一个优势,就是,即便前面的rs或者st关闭的时候出现了异常,后面的c ...

噢,那就是用第一种就可以了,第二种知道就可以了·~!谢了·




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2