JDBC获取数据库连接的方式

1.获取数据库连接

1.1 要素一:Driver接口实现类

1.1.1 Driver接口介绍

  • java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。
  • 在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些Driver实现。
    Oracle的驱动:oracle.jdbc.driver.OracleDriver
    mySql的驱动: com.mysql.jdbc.Driver

1.1.2 加载与注册JDBC驱动

  • 加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名 Class.forName(“com.mysql.jdbc.Driver”);

  • 注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序
    使用DriverManager.registerDriver(com.mysql.jdbc.Driver)来注册驱动
    通常不用显式调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。

1.2 要素二:URL

  • JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
  • JDBC URL的标准由三部分组成,各部分间用冒号分隔。
    jdbc:子协议:子名称
    (1)协议:JDBC URL中的协议总是jdbc
    (2)子协议:子协议用于标识一个数据库驱动程序
    (3)子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的ip地址),端口号,数据库名

举例:

image.png

几种常用数据库的 JDBC URL
MySQL的连接URL编写方式:
jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
jdbc:mysql://localhost:3306/atguigu
jdbc:mysql://localhost:3306/atguigu?useUnicode=true&characterEncoding=utf8(如果JDBC
程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
jdbc:mysql://localhost:3306/atguigu?user=root&password=123456

Oracle 9i的连接URL编写方式:
jdbc:oracle:thin:@主机名称:oracle服务端口号:数据库名称
jdbc:oracle:thin:@localhost:1521:atguigu

SQLServer的连接URL编写方式:
jdbc:sqlserver://主机名称:sqlserver服务端口号:DatabaseName=数据库名称
jdbc:sqlserver://localhost:1433:DatabaseName=atguigu

1.3 要素三:用户名和密码

  • user,password可以用“属性名=属性值”方式告诉数据库 (将数据库连接所需要的基本信息封装到配置文件中)
  • 可以调用 DriverManager 类的 getConnection() 方法建立到数据库的连接

数据库连接方式举例(推荐使用方式五,其它作为参考)

package com.lty.connection;

import java.io.IOException;
import java.io.InputStream;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.DriverManager;
import java.util.Properties;

import org.junit.Test;

public class ConnectionTest {
    // 方式一
    @Test
    public void testConnection1() throws Exception {
        // 获取Driver的实现类对象
        Driver driver = new com.mysql.jdbc.Driver();

        // jdbc:mysql: 协议
        // localhost: IP地址
        // 3306 mysql默认端口号
        // test 要进行连接的数据库名称

        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";

        // 将用户名和密码封装在Properties中
        Properties info = new Properties();
        info.setProperty("user", "root");
        info.setProperty("password", "root");

        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");
        Driver driver = (Driver) clazz.newInstance();

        // 2.提供要连接的数据库
        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";

        // 3.提供连接数据库需要的用户名和密码
        Properties info = new Properties();
        info.setProperty("user", "root");
        info.setProperty("password", "root");

        // 4.获取连接
        Connection conn = driver.connect(url, info);

        System.out.println(conn);
    }

    // 方式三: 使用DriverManager替换Driver
    @Test
    public void testConnection3() throws Exception {
        // 1.获取Driver的实现类对象
        Class clazz = Class.forName("com.mysql.jdbc.Driver");
        Driver driver = (Driver) clazz.newInstance();

        // 2.提供另外三个连接的基本信息
        String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&characterEncoding=utf8";
        String user = "root";
        String password = "root";

        // 注册驱动
        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?useUnicode=true&characterEncoding=utf8";
        String user = "root";
        String password = "root";

        // 2.加载Driver
        Class.forName("com.mysql.jdbc.Driver"); // static 静态代码块随着类的加载而执行
//      Driver driver = (Driver) clazz.newInstance();       
//      // 注册驱动
//      DriverManager.registerDriver(driver);

        // 3.获取连接
        Connection conn = DriverManager.getConnection(url, user, password);

        System.out.println(conn);
    }

    // 方式五: 最终版 将数据库连接需要的4个基本信息声明在配置文件中,通过读取配置文件的方式,获取连接
    /**
     * 此种方式的好处? 1.实现了数据与代码的分离。 实现了解耦 
     * 2.如果需要修改配置文件信息,可以避免程序重新打包
     */
    @Test
    public void testConnection5() throws Exception {

        // 1.读取配置文件中的4个基本信息             配置文件一般建立在src目录下,新建file即可
        // 通过当前类加载器 读取配置文件 jdbc.properties 中的基本信息        默认识别路径就是src下
        InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties"); // 配置文件中的注释是 : #

        Properties pros = new Properties();
        pros.load(is);
        String user = pros.getProperty("user");
        String password = pros.getProperty("password");
        String url = pros.getProperty("url");
        String driverClass = pros.getProperty("driverClass");

        // 2.加载驱动
        Class.forName(driverClass);

        // 3.获取连接
        Connection conn = DriverManager.getConnection(url, user, password);

        System.out.println(conn);
    }
}

你可能感兴趣的:(JDBC获取数据库连接的方式)