以下代码中包含有五种方式获取连接并且逐步说明连接的优化过程:
package com.atguigu.connecton;
import org.junit.Test;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.security.spec.ECField;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
public class ConnectionTest{
/**
* 方式一,使用到了第三方API,不推荐
* @throws SQLException
*/
@Test
public void testConnection1() throws SQLException {
//实例化驱动类
Driver driver = new com.mysql.cj.jdbc.Driver();
/*
* jdbc:mysql 规范
* localhost 本机
* 3306 端口
* rbac 数据库名称
* */
String url = "jdbc:mysql://localhost:3306/rbac";
//通过Properties对用户名与密码进行封装
Properties properties = new Properties();
properties.setProperty("user","root");
properties.setProperty("password","mysqladmin");
//获得连接对象
Connection connection = driver.connect(url,properties);
System.out.println(connection);
}
/**
* 方式二:对方式一的迭代,在程序中不会出现第三方的API,使得程序具有更好的可移植性
*/
@Test
public void testConnection2() throws Exception{
//获取Driver对象(反射实现)
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
//通过获取构造方法实例化对象//
Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
//提供要连接的数据库信息以及properties
String url = "jdbc:mysql://localhost:3306/rbac";
//通过Properties对用户名与密码进行封装
Properties properties = new Properties();
properties.setProperty("user","root");
properties.setProperty("password","mysqladmin");
//获得连接对象
Connection connection = driver.connect(url,properties);
System.out.println(connection);
}
/**
* 方式三:使用DriverManager(JDBC驱动的工厂类)替换Driver
*/
@Test
public void testConnection3() throws Exception{
//获取Driver实现类对象
Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
Driver driver = (Driver) clazz.getDeclaredConstructor().newInstance();
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
String url = "jdbc:mysql://localhost:3306/rbac";
String user = "root";
String password = "mysqladmin";
Connection connection = DriverManager.getConnection(url,user,password);
System.out.println(connection);
}
/**
* 方式四:在方式三的基础上做优化,只需要加载驱动,不需要做驱动注册的过程
*/
@Test
public void testConnection4() throws Exception{
//连接的基本信息
String url = "jdbc:mysql://localhost:3306/rbac";
String user = "root";
String password = "mysqladmin";
/*
* 对驱动进行加载,加载中会执行其中的静态代码,代码块中的内容则是对此驱动进行注册
* 这一句也可以省略,因为在4.0版本以后在service中的已经定义了自动加载驱动,但是为了可读性最好不要省略,因为其他数据库可能不支持。
* */
Class.forName("com.mysql.cj.jdbc.Driver");
//通过注册后的DriverManager对象获取连接
Connection connection = DriverManager.getConnection(url,user,password);
System.out.println(connection);
}
/**
* 方式五:将数据库连接需要的四个基本信息声明在配置文件中,通过哦诶之文件的方式获取连接
*/
@Test
public void testConnection5() throws Exception {
//通过类加载器读取配置文件到输入流
InputStream in = ConnectionTest.class.getClassLoader().getResourceAsStream("JDBCConfig.properties");
//创建一个Properties类对象
Properties properties = new Properties();
//加载输入流到properties中
properties.load(in);
//加载驱动类
Class.forName(properties.getProperty("driver"));
//获取连接对象,参数在配置文件中读取
Connection connection = DriverManager.getConnection(properties.getProperty("url"),
properties.getProperty("user"),
properties.getProperty("password"));
System.out.println(connection);
}
}
方式五中的配置文件:
driver = com.mysql.cj.jdbc.Driver
url = jdbc:mysql://localhost:3306/rbac
user = root
password = mysqladmin
最后就实现了:
- 数据与代码的分离,实现了解耦
- 要过要修改配置信息就可以避免程序重新打包