大部分连接数据库需要三步:1.连接mysql数据库 2.执行SQL语句 3.关闭资源
因此,可以将连接数据库与关闭的过程封装到一个工具包Utility
public class JDBCUtility {
// 定义相关属性
private static String user;
private static String password;
private static String url;
private static String driver;
// 在静态代码块中实现属性的初始化
static {
// 通过配置文件读取文件信息
Properties properties = new Properties();
properties.load(new FileInputStream("src//mysql.properties"));
user = properties.getProperty("user");
password = properties.getProperty("password");
url = properties.getProperty("url");
driver = properties.getProperty("driver");
}
// 连接数据库
public static Connection getConnect() {
return DriverManager.getConnection(url, user, password);
}
// 关闭数据库中的资源
public static void close(ResultSet resultSet, Statement statement, Connection connection) {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
}
传统的数据库连接存在不少问题:
1.每次向数据库建立连接都需要通过DriverManager来获取,将Connection加载到内存中
频繁的连接数据库会占用很多的系统资源,容易造成服务器崩溃。
2.每一次使用完数据库都需要断开。
如果程序出现异常而未能关闭将导致数据库内存泄漏,最终导致重启数据库。
3.传统获取连接的方式,不能控制创建连接的数目。
如果数量过多,会导致内存泄漏,mysql崩溃。
解决传统开发中数据库连接问题,可以采用数据库连接池技术。
数据库连接池:
预先在缓冲池中放入一定数量的连接,当需要建立数据库连接时,只需从“缓冲池”中取出。使用完毕后放回。
数据库连接池负责分配、管理和释放数据库连接,允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个
应用程序向连接池请求的连接数量超过最大连接数量时,这些请求将加入等待队列中。
数据库连接池的种类:
JDBC数据库连接池用javax.sql.DataSource来表示。DataSource是一个接口(第三方实现)
1.C3P0数据库连接池,速度相对较慢,稳定性不错
2.DBCP数据库连接池:速度相对C3P0较快,但不稳定
3.proxool数据库连接池:具有监控连接池的功能,稳定性较C3P0差一点
4.BoneCP数据库连接池:速度快
5.Druid(德鲁伊)数据库连接池:阿里提供的数据库连接池,集优点于一身。
利用Druid获得与数据库的连接:
1.加入Druid.jar包
2.加载配置文件
Properties properties = new Properties();
properties.load(new FileInputStream("src//druid.properties"));
3.创建数据库连接池
DataSource dataSource = DruidDataSourceFactory.createDataSource(properties);
4.获得连接
Connection connection = dataSource.getConnection();
基于Druid实现连接、关闭数据库的工具包Utility:
public class DruidUtility {
// 声明数据库连接池
public static DataSource ds;
// 静态代码块中初始化
static {
// 读取配置文件中的信息
Properties properties = new Properties();
properties.load(new FileInputStream("src\\druid.properties"));
// 初始化数据库连接池
ds = DruidDataSourceFactory.createDataSource(properties);
}
// 连接数据库
public static Connection getConnection() {
return ds.getConnection();
}
// 关闭数据库
public static void close(ResultSet resultSet, Statement statement, Connection connection) {
if (resultSet != null) {
resultSet.close();
}
if (statement != null) {
statement.close();
}
if (connection != null) {
connection.close();
}
}
}