“获取数据库连接的方式一”的版本间的差异
		
		
		
		
		
		跳到导航
		跳到搜索
		
				
		
		
	
Jihongchang(讨论 | 贡献)  | 
				Jihongchang(讨论 | 贡献)   | 
				||
| 第10行: | 第10行: | ||
**Oracle的驱动:oracle.jdbc.driver.OracleDriver  | **Oracle的驱动:oracle.jdbc.driver.OracleDriver  | ||
**MySQL的驱动:com.mysql.jdbc.Driver(之前的旧版本) 或 com.mysql.cj.jdbc.Driver(MySQL Server 8.0、5.7)  | **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|无|缩略图]]  | ||
2022年12月14日 (三) 06:09的版本
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 地址),端口号,数据库名
 
 - 举例: