关于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);}}}}}
以上两种方法实际上是抛运行时异常的不同导致的,理解也从运行时异常着手
- 关于sql 关闭资源常用两种方法的讨论
- IO-文件流-两种正确关闭资源的方法
- C#中关闭SQL数据库连接的两种方法。
- 通过文件的拷贝例子,来详解文件资源的正确关闭的两种方法
- 两种关闭窗口的方法
- 关闭窗口的两种方法
- [备忘]IOS开发中关闭键盘的两种常用方法
- Java关闭数据库资源的两种方式
- 关于C#打开窗口的同时关闭自身窗口的两种实现方法
- 关于vector的erase删除操作的两种不同方法,在linux与visual studio的实现讨论
- CString转char*的两种方法讨论
- CString转char*的两种方法讨论
- 关于级别表的两例常用sql语句
- 关于数学公式输入中括号的换行问题 的两种常用方法
- 关闭窗口弹出提示的两种处理方法
- iOS关闭键盘的两种简单方法
- iOS关闭键盘的两种简单方法
- iOS关闭键盘的两种简单方法
- MySQL select 语句插入中文要注意的
- (程序员面试题)字符串处理之获取字符串的所有子串
- HDU 2544 (带权值的最短路 13.11.16)
- 通过Gradle来下载依赖的jar包
- 猜数字小游戏
- 关于sql 关闭资源常用两种方法的讨论
- Java中堆内存和栈内存详解
- Java内存泄露的理解与解决
- 求两个正整数的正差值
- iOS7 Xcode 5如何设置隐藏状态栏
- 常用Eclipse插件
- javascript之正则表达式(一)
- MyEclipse设置全局编码
- 发布一款新的Cortex A8 S5pv210 金手指核心板Sate210-F(附上硬件用户手册说明书)用于低价DIY活动