黑马程序员技术交流社区

标题: 关于JDBCUtils工具类读取配置文件的疑问 [打印本页]

作者: 河边捉虾米    时间: 2016-11-15 21:33
标题: 关于JDBCUtils工具类读取配置文件的疑问
package com.itheima.utils;

import java.io.FileReader;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;

import com.itheima.jdbc.Demo01;

public class JDBCUtils {
        /*
         * 提供方法获得连接
         */
        public static Connection getConnection() {
                Connection conn = null;
                try {
                        // FileReader reader = new FileReader("jdbc.properties");
                        // 只能读取项目根目录下面的配置文件

                        /*
                         * JAVA在运行是,会去项目对应类的字节码文件(.class)所在的根目录(D:\itcast代码\ee43\day09\bin),使用类加载器ClassLoader,
                         * 放置到JAVA虚拟机中执行
                         */
                        InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");

                        // 配置文件的工具类
                        Properties prop = new Properties();
                        // 加载文件流
                        prop.load(in);
                        String driver = prop.getProperty("jdbc.driver");
                        String url = prop.getProperty("jdbc.url");
                        String username = prop.getProperty("jdbc.username");
                        String password = prop.getProperty("jdbc.password");

                        Class.forName(driver);
                        // 2获得连接
                        conn = DriverManager.getConnection(url, username, password);
                } catch (Exception e) {
                        e.printStackTrace();
                }
                return conn;

        }

        /*
         * 释放资源
         */
        public static void closeResource(ResultSet rs, Statement st, Connection conn) {
                try {
                        if (rs != null) {// 调用closeResource方式时,参数有可能为null
                                rs.close();
                        }
                } catch (SQLException e) {
                        e.printStackTrace();
                } finally { // 即使resultSet关闭失败,finally语句块也会被执行
                        try {
                                if (st != null) {
                                        st.close();
                                }
                        } catch (SQLException e) {
                                e.printStackTrace();
                        } finally {
                                try {
                                        if (conn != null) {
                                                conn.close();
                                        }
                                } catch (SQLException e) {
                                        e.printStackTrace();
                                }
                        }
                }

        }
}


请问下面这句中的流为什么不关?不是说流都要关闭的么?
InputStream in = JDBCUtils.class.getClassLoader().getResourceAsStream("jdbc.properties");
作者: IceLoveInFire丶    时间: 2016-11-15 22:55
我好像知道你是谁了

作者: 河边捉虾米    时间: 2016-11-17 23:49
IceLoveInFire丶 发表于 2016-11-15 22:55
我好像知道你是谁了

看到你这个冲击之刃我也知道你是谁了!
作者: IceLoveInFire丶    时间: 2016-11-17 23:52
河边捉虾米 发表于 2016-11-17 23:49
看到你这个冲击之刃我也知道你是谁了!

拥抱暗影吧





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