package JDBC;
import com.alibaba.druid.pool.DruidDataSourceFactory;
import javax.sql.DataSource;
import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
public class JdbcUtils {
//静态成员变量DataSource
//定义成员变量DataSource -> 保持全局只有一个数据库连接池,如果不写static,其他方法/静态代码块则无法加载
private static DataSource ds;
static {
try {
//创建一个 Properties保存读取的数据
Properties prop = new Properties();
//链式编程 通过列名.class获取class
// 通过getResourceAsStream()方法传入路径获取字节流
InputStream is = JdbcUtils.class.getClassLoader().getResourceAsStream("Druid.properties");
//调用load() 将获取的流作为参数 读取文件 到集合
prop.load(is);
//通过DruidDataSourceFactory工厂类获取数据库连接池对象
ds = DruidDataSourceFactory.createDataSource(prop);
} catch (IOException e) {
e.printStackTrace();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 因为当JDBCUtils加载的时候,先创建静态成员变量ds,并且执行静态代码块.
*
* @return
* @throws SQLException 提醒调用者这里可能会出现异常.
*/
public static Connection getConnection() throws SQLException {
//通过DataSource中的getConnection()方法获取 connection对象
return ds.getConnection();
}
/**
* 返回全局唯一的数据库连接池.
*
* @return
*/
public static DataSource getDataSource() {
//返回获取的连接池对象 给你方法调用者
return ds;
}
/**
* 释放资源的方法DML(ResultSet ,Statement,Connection)
*/
public static void close(ResultSet rs, Statement stat, Connection conn) {
//判断stat是否为空 不为空就释放资源
if (stat != null) {
try {
stat.close();
} catch (SQLException e) {
e.printStackTrace();
}
} //判断conn是否为空 不为空就释放资源
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
} //判断rs是否为空 不为空就释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
/**
* 释放资源的方法DML(Statement,Connection)
*/
//方法重载
public static void close(Statement stat, Connection conn) {
//调用多参数的方法
close(null, stat, conn);
}
}
Druid.properties 文件内容
driverName=com.mysql.jdbc.Driver
url=jdbc:mysql:///db2
#账号
user=root
#密码
password=123456