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"); |
|