一、JDBC程序编写步骤

image.png
在maven工程的pom.xml文件添加相关依赖

  1. <dependencies>
  2. <dependency>
  3. <groupId>com.oracle.database.jdbc</groupId>
  4. <artifactId>ojdbc8</artifactId>
  5. <version>21.1.0.0</version>
  6. </dependency>
  7. <dependency>
  8. <groupId>mysql</groupId>
  9. <artifactId>mysql-connector-java</artifactId>
  10. <version>8.0.19</version>
  11. </dependency>
  12. </dependencies>

二、连接方式一

在idea中的代码Driver类按Ctrl + H查看实现类

package com.wu.web.jdbc;
import org.junit.Test;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.SQLException;
import java.util.Properties;

public class ConnectionTest {
    @Test
    public void testConnection1() throws SQLException {
        //获取Driver的实现类对象
        Driver driver = new com.mysql.cj.jdbc.Driver();
        //jdbc : mysql:协议
        //localhost : ip地址
        // 3306 : 默认mysql的端口号
        // book : book数据库
        String url = "jdbc:mysql://112.126.91.232:3306/book";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","root");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }
}

image.png
执行代码后没有报错,出现了com.mysql.cj.jdbc.ConnectionImpl@6dc17b83就证明连接正常,ConnectionImpl是Connection接口的实现类
image.png

三、连接方式二(迭代一)

public class ConnectionTest {
    @Test
    public void testConnection1() throws Exception {

        //通过反射的方式获取Driver实现类
        //使用反射通用性更高,只要在Class.forName()放入驱动实现类
        Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver)clazz.newInstance();
        //jdbc : mysql:协议
        //localhost : ip地址
        // 3306 : 默认mysql的端口号
        // book : book数据库
        String url = "jdbc:mysql://112.126.91.232:3306/book";
        Properties info = new Properties();
        info.setProperty("user","root");
        info.setProperty("password","root");
        Connection connect = driver.connect(url, info);
        System.out.println(connect);
    }
}

四、连接方式三(迭代二)

public class ConnectionTest {
    @Test
    public void testConnection1() throws Exception {
        //DriverManager是sun公司提供的类,它是管理jdbc驱动的集合的基础服务
        //使用DriverManager替换Driver
        //获取Driver的实现类对象
        Class clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver)clazz.newInstance();

        //提供另外三个的基本信息
        String url = "jdbc:mysql://112.126.91.232:3306/book";
        String user = "root";
        String password = "root";
        //注册驱动
        DriverManager.registerDriver(driver);
        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }
}

五、连接方式四(迭代三)

public class ConnectionTest {
    @Test
    public void testConnection1() throws Exception {

        //1.提供另外三个的基本信息
        String url = "jdbc:mysql://112.126.91.232:3306/book";
        String user = "root";
        String password = "root";
        //2.获取Driver实现类对象,注册驱动由mysql自动做了
        Class.forName("com.mysql.cj.jdbc.Driver");
        //3.获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }
}

类加载的时候Driver类的静态代码块中注册了驱动
image.png

public class ConnectionTest {
    @Test
    public void testConnection1() throws Exception {

        //1.提供另外三个的基本信息
        String url = "jdbc:mysql://112.126.91.232:3306/book";
        String user = "root";
        String password = "root";
        //2.获取Driver实现类对象
        //Class.forName("com.mysql.cj.jdbc.Driver");
        //3.获取连接
        Connection connection = DriverManager.getConnection(url, user, password);
        System.out.println(connection);
    }
}

Class.forName(“com.mysql.cj.jdbc.Driver”)类加载也可以省略,也能成功加载,因为在mysql驱动中进行了Driver实例化
image.png
Class.forName(“com.mysql.cj.jdbc.Driver”)还是不能去掉,因为oracle这样做会报错,还是要指定要加载什么驱动类

六、连接方式五(final版)

通过读取配置文件获取需要的基本信息
创建jdbc.properties文件

username=root
password=root
url=jdbc:mysql://112.126.91.232:3306/book
driverClassName=com.mysql.cj.jdbc.Driver
initialSize=5
maxActive=10
public class ConnectionTest {
    @Test
    public void testConnection1() throws Exception {

        //1.读取配置文件的4个基本信息
        //通过系统类的加载器获取配置文件,默认路径是当前类所在路径,如果是idea创建的web工程,就放到resources文件夹下
        InputStream st = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
        Properties pt = new Properties();
        pt.load(st);

        String username = pt.getProperty("username");
        String password = pt.getProperty("password");
        String url = pt.getProperty("url");
        String driverClass = pt.getProperty("driverClassName");
        //2.加载驱动
        Class.forName(driverClass);
        //3.获取连接
        Connection connection = DriverManager.getConnection(url, username, password);
        System.out.println(connection);
    }
}

此种方式的好处?
1.实现了数据与代码的分离。实现了解耦
2.如果需要修改配置文件信息,可以避免程序重新打包。