关于sql 关闭资源常用两种方法的讨论

来源:互联网 发布:xcon支持哪些软件 编辑:程序博客网 时间:2024/05/14 11:41

第一种:把if(...)语句放在外面

package com.itheima.util;import java.io.FileReader;import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.Properties;public class JDBCUtils {private static Properties prop = null;private JDBCUtils() {}static{try {prop = new Properties();prop.load(new FileReader(JDBCUtils.class.getClassLoader().getResource("config.properties").getPath()));} catch (Exception e) {e.printStackTrace();throw new RuntimeException();}}public static Connection getConn() throws ClassNotFoundException, SQLException{Class.forName(prop.getProperty("driver"));return DriverManager.getConnection(prop.getProperty("url"),prop.getProperty("user"),prop.getProperty("password"));}public static void close(ResultSet rs ,Statement stat ,Connection conn){if(rs!=null){              //这个写在外边因为要置为null作打算try {rs.close();} catch (SQLException e) {e.printStackTrace();   //throw new RuntimeException(e);   这个不能再这里转换抛出,因为这个是运行时异常,这样会运行rs=null,然后就停止运行了                       //,会令到下面的stat,conn 不执行}finally{rs = null;         //此处会使到try{rs.close }就算出现异常,rs置为null后会被垃圾回收机制回收,以下同}}if(stat!=null){try {stat.close();} catch (SQLException e) {e.printStackTrace();}finally{stat = null;}}if(conn!=null){try {conn.close();} catch (SQLException e) {e.printStackTrace();}finally{conn = null;}}}}


 

第二种,if语句放在里面

/** * 释放资源 * @param conn * @param st * @param rs */public static void closeResource(Connection conn,Statement st ,ResultSet rs){try {if(rs != null){       rs.close();}} catch (SQLException e) {                      throw new RuntimeException(e.getMessage(),e);//这个即使使用了运行时异常下面也会执行,因为finally机制继续执行下去} finally{                                          //但是自身如果出现异常的话还会占用一定的内存try {if(st != null){st.close();}} catch (SQLException e) {throw new RuntimeException(e.getMessage(),e);} finally{try {if(conn != null){conn.close();}} catch (SQLException e) {throw new RuntimeException(e.getMessage(),e);}}}}}


以上两种方法实际上是抛运行时异常的不同导致的,理解也从运行时异常着手

原创粉丝点击