package com.atguigu.connection;
import org.junit.Test;
import java.io.IOException;
import java.io.InputStream;
import java.lang.reflect.Constructor;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.util.Properties;
/*
*
*
*
*
*@author 刘鑫
*@create by 2021/4/29 11:03
*/
public class ConnectionTest {
//方式一
@Test
public void testConnection1() throws SQLException {
//加载数据库驱动
//获取Driver实现类对象
Driver driver = new com.mysql.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/test";
//将用户名和密码封装在Properties中
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","a421546457");
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
//方式二:对方式一的迭代:在如下的程序中不出现第三方的API,具有更好的移植性
@Test
public void testConnection2() throws Exception {
//1、获取Driver实现类对象,使用反射
Class<?> clazz = Class.forName("com.mysql.jdbc.Driver");
Constructor<?> declaredConstructor = clazz.getDeclaredConstructor();
Driver driver = (Driver) declaredConstructor.newInstance();
//2、提供要连接的数据库
String url = "jdbc:mysql://localhost:3306/test";
//3、提供连接需要的用户名和密码
Properties info = new Properties();
info.setProperty("user","root");
info.setProperty("password","a421546457");
//4、获取连接
Connection conn = driver.connect(url, info);
System.out.println(conn);
}
//方式三:使用DriverManager替换Driver
@Test
public void testConnection3() throws Exception {
//1、获取Driver实现类对象
Class<?> aClass = Class.forName("com.mysql.jdbc.Driver");
Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
Driver driver = (Driver) declaredConstructor.newInstance();
//2、提供两外三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password="a421546457";
//注册驱动
DriverManager.registerDriver(driver);
//获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
//方式四:在方式三的基础上进行优化
@Test
public void testConnection4() throws Exception {
//1、提供三个连接的基本信息
String url = "jdbc:mysql://localhost:3306/test";
String user = "root";
String password="a421546457";
//2、加载Driver
//mysql的Driver类中有静态代码块
Class.forName("com.mysql.jdbc.Driver");
// 相较于方式三,可以省略如下的操作:
/*Constructor<?> declaredConstructor = aClass.getDeclaredConstructor();
Driver driver = (Driver) declaredConstructor.newInstance();
//注册驱动
DriverManager.registerDriver(driver);*/
/*
* 为什么可以省略上述操作呢?
* mysql的Driver类中有静态代码块如下,帮我们注册好了驱动:
* static {
try {
DriverManager.registerDriver(new Driver());
} catch (SQLException var1) {
throw new RuntimeException("Can't register driver!");
}
* */
//获取连接
Connection conn = DriverManager.getConnection(url, user, password);
System.out.println(conn);
}
//方式五(final版):将数据库连接需要的四个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
/*
* 此种方式的好处?
* 1、实现了数据和代码的分离。实现了解耦
* 2、如果需要修改配置文件信息,可以避免程序重新打包
*
* */
@Test
public void testConnection5(){
//1、读取配置文件中的4个基本信息
InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
Properties properties = new Properties();
try {
properties.load(is);
} catch (IOException e) {
e.printStackTrace();
}
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String driverClass = properties.getProperty("driverClass");
//2、加载数据库驱动
try {
Class.forName(driverClass);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
//3、获取数据库连接
try {
Connection connection = DriverManager.getConnection(url, user, password);
System.out.println(connection);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
}
jdbc连接数据库的五种方式
最新推荐文章于 2024-05-04 13:51:18 发布