目录
一、DBUtill类用于管理数据库连接
DataSource 每个应用程序只应该有一个实例~~(单例)
DBUtil 本质上是实现了一个单例模式,管理了唯一一个 DataSource 实例
1)建立连接
2)断开连接
3)JDBC 使用DataSource 来管理连接
4)DBUtil 相当于是对 DataSource 再稍微包装一层
单例模式有两种风格:
1.饿汉模式
2.懒汉模式
二、代码实现
使用懒汉模式进行封装~
package model;
import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;
import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/**
* @program: test_maven
* @description
* @author: wenwen
* @create: 2021-08-15 10:45
**/
public class DBUtil {
private static DataSource dataSource = null;
private static final String URL ="jdbc:mysql://127.0.0.1:3306/java16_blogDemo?characterEncoding=utf-8&useSSL=true";
private static final String USERNAME= "root";
private static final String PASSWORD= "root";
public static DataSource getDataSource(){
if (dataSource == null) {
synchronized (DBUtil.class) {
if(dataSource == null){
dataSource = new MysqlDataSource();
//还需要给 DataSource 设置一些属性
((MysqlDataSource)dataSource).setURL(URL);
((MysqlDataSource)dataSource).setUser(USERNAME);
((MysqlDataSource)dataSource).setPassword(PASSWORD);
}
}
}
return dataSource;
}
//通过这个方法来获取连接
public static Connection getConnection() throws SQLException {
try {
return getDataSource().getConnection();
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
//通过这个方法来关闭连接
public static void close(Connection connection, PreparedStatement statement, ResultSet resultSet) throws SQLException {
try {
if(resultSet != null){
resultSet.close();
}
if(statement != null){
statement.close();
}
if(connection != null){
connection.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
后续如果想要和数据库建立连接,只需要调用静态方法就可以啦~~
Connection connection = DBUtil.getConnection();
三、数据库连接不上
和数据库建立连接的时候有一个常见的问题:数据库连接不上。
常见原因:
1.url 写错了(数据库的IP,端口号,数据库名错了,url格式错了)
2.用户名/密码错了
3.数据库服务器没有正确启动
4.连接其他主机的数据库,会被MySQL的安全策略阻拦