“获取数据库连接的方式一”的版本间的差异

来自姬鸿昌的知识库
跳到导航 跳到搜索
 
(未显示同一用户的8个中间版本)
第9行: 第9行:
 
*在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些 Driver 实现。
 
*在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理器类(java.sql.DriverManager)去调用这些 Driver 实现。
 
**Oracle的驱动:oracle.jdbc.driver.OracleDriver
 
**Oracle的驱动:oracle.jdbc.driver.OracleDriver
**MySQL的驱动:com.mysql.jdbc.Driver
+
**MySQL的驱动:com.mysql.jdbc.Driver(之前的旧版本) 或 com.mysql.cj.jdbc.Driver(MySQL Server 8.0、5.7)
 +
引入 jar 包<syntaxhighlight lang="xml">
 +
        <dependency>
 +
            <groupId>mysql</groupId>
 +
            <artifactId>mysql-connector-java</artifactId>
 +
            <version>8.0.30</version>
 +
        </dependency>
 +
</syntaxhighlight>
 +
 
 +
====加载与注册JDBC驱动====
 +
 
 +
*加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名
 +
**<syntaxhighlight lang="java">
 +
Class.forName("com.mysql.cj.jdbc.Driver");
 +
</syntaxhighlight>
 +
*注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序
 +
**使用 DriverManager.registerDriver(com.mysql.cj.jdbc.Driver)来注册驱动
 +
**通常不用显式调用 Driver 类的 registerDriver() 方法来注册驱动程序类的实现,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。下面是MySQL的Driver实现类的源码:<syntaxhighlight lang="java">
 +
public class Driver extends NonRegisteringDriver implements java.sql.Driver {
 +
    //
 +
    // Register ourselves with the DriverManager
 +
    //
 +
    static {
 +
        try {
 +
            java.sql.DriverManager.registerDriver(new Driver());
 +
        } catch (SQLException E) {
 +
            throw new RuntimeException("Can't register driver!");
 +
        }
 +
    }
 +
</syntaxhighlight>
 +
 
 +
 
 +
===要素二:URL===
 +
 
 +
*JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
 +
 
 +
*JDBC URL 的标准由三部分组成,各部分间用冒号分隔。
 +
**jdbc:子协议:子名称
 +
**协议:JDBC URL 中的协议总是 jdbc
 +
**子协议:子协议用于标识一个数据库驱动程序
 +
**子名称:一种标识数据库的方法,子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的 IP 地址),端口号,数据库名
 +
*举例:[[文件:获取数据库连接 1.png|无|缩略图]]
 +
*集中常见数据库的 JDBC URL
 +
**MySQL 的连接 URL 编写方式:
 +
***jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
 +
***jdbc:mysql://localhost:3306/guns
 +
***
 +
官方给的示例的URL 一般在 docs、readme 之类的文本文件里,或者去官网的示例里找 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-examples.html
 +
 
 +
<syntaxhighlight lang="java">
 +
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 = new com.mysql.cj.jdbc.Driver();
 +
 
 +
        /*
 +
        * jdbc:mysql  协议
 +
        * localhost  ip地址
 +
        * 3306 端口号
 +
        * guns guns数据库
 +
        * */
 +
        String url = "jdbc:mysql://localhost:3306/guns";
 +
 
 +
        //将用户名和密码封装到 Properties 中
 +
        Properties info = new Properties();
 +
        info.setProperty("user", "root");
 +
        info.setProperty("password", "123456");
 +
 
 +
        Connection conn = driver.connect(url, info);
 +
 
 +
        System.out.println(conn);
 +
 
 +
    }
 +
 
 +
}
 +
</syntaxhighlight><syntaxhighlight lang="console">
 +
com.mysql.cj.jdbc.ConnectionImpl@4278a03f
 +
</syntaxhighlight>https://github.com/jihch/jdbc/blob/main/src/main/java/io/github/jihch/connection/ConnectionTest.java

2022年12月14日 (三) 14:40的最新版本

https://www.bilibili.com/video/BV1eJ411c7rf?p=7

要素一:Driver接口实现类

Driver接口介绍

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

引入 jar 包

        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>8.0.30</version>
        </dependency>

加载与注册JDBC驱动

  • 加载驱动:加载 JDBC 驱动需调用 Class 类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名
    • Class.forName("com.mysql.cj.jdbc.Driver");
      
  • 注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序
    • 使用 DriverManager.registerDriver(com.mysql.cj.jdbc.Driver)来注册驱动
    • 通常不用显式调用 Driver 类的 registerDriver() 方法来注册驱动程序类的实现,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。下面是MySQL的Driver实现类的源码:
      public class Driver extends NonRegisteringDriver implements java.sql.Driver {
          //
          // Register ourselves with the DriverManager
          //
          static {
              try {
                  java.sql.DriverManager.registerDriver(new Driver());
              } catch (SQLException E) {
                  throw new RuntimeException("Can't register driver!");
              }
          }
      


要素二:URL

  • JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。
  • JDBC URL 的标准由三部分组成,各部分间用冒号分隔。
    • jdbc:子协议:子名称
    • 协议:JDBC URL 中的协议总是 jdbc
    • 子协议:子协议用于标识一个数据库驱动程序
    • 子名称:一种标识数据库的方法,子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的 IP 地址),端口号,数据库名
  • 举例:
    获取数据库连接 1.png
  • 集中常见数据库的 JDBC URL
    • MySQL 的连接 URL 编写方式:
      • jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
      • jdbc:mysql://localhost:3306/guns

官方给的示例的URL 一般在 docs、readme 之类的文本文件里,或者去官网的示例里找 https://dev.mysql.com/doc/connector-j/8.0/en/connector-j-examples.html

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 = new com.mysql.cj.jdbc.Driver();

        /*
        * jdbc:mysql  协议
        * localhost  ip地址
        * 3306 端口号
        * guns guns数据库
        * */
        String url = "jdbc:mysql://localhost:3306/guns";

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

        Connection conn = driver.connect(url, info);

        System.out.println(conn);

    }

}
com.mysql.cj.jdbc.ConnectionImpl@4278a03f

https://github.com/jihch/jdbc/blob/main/src/main/java/io/github/jihch/connection/ConnectionTest.java