JavaEE JDBC 怎么加载驱动

时间:2022-09-19 11:18:32

JDBC怎么加载驱动

@author ixenos

 

 

分析


 

1.JDBC是一套连接数据库的接口(放在java.util.sql.Driver类中),不同的数据库依此接口各自实现Java连接到数据库的操作,这些具体的实现就叫做驱动

JavaEE JDBC 怎么加载驱动

 

2.当只连接一个数据库时,我们可以new 驱动对象来使用,但是当多数据库连接时,要多次创建Driver示例,多次创连接Connection,有些繁琐,这时,sun提供了一个驱动的管理器DriverManager,注册驱动就可以调用;

3.但是每次还是要创Driver实例,然后都进行注册,而且可能重复注册,怎么办?jdbc驱动的实现者就把新建实例驱动注册的操作包裹为一个static块(在类加载连接初始化时运行,且只运行一次),这样加载驱动时就执行这些操作了,这也就是为什么只用Class.forName的由来。

 

 

com.mysql.jdbc.Driver对加载驱动的实现


   com.mysql.jdbc.Driver把DriverManager的注册放在了静态块中

JavaEE JDBC 怎么加载驱动

 

 

 

代码


 

import java.sql.Connection;

import java.sql.Driver;

import java.sql.DriverManager;

import java.util.Properties;

 

import org.junit.Test;

/**

 * jdbc连接数据库

 * @author ixenos

 *

 */

public class Demo1 {

      //连接数据库的URL

      private String url = "jdbc:mysql://localhost:3306/day17";

                          // jdbc协议:数据库子协议:主机:端口/连接的数据库   //

 

      private String user = "root";//用户名

      private String password = "root";//密码

     

      /**

       * 第一种方法

       * @throws Exception

       */

      @Test

      public void test1() throws Exception{

           //1.创建驱动程序类对象

           Driver driver = new com.mysql.jdbc.Driver(); //新版本

           //Driver driver = new org.gjt.mm.mysql.Driver(); //旧版本

          

           //设置用户名和密码

           Properties props = new Properties();

           props.setProperty("user", user);

           props.setProperty("password", password);

          

           //2.连接数据库,返回连接对象

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

          

           System.out.println(conn);

      }

     

      /**

       * 使用驱动管理器类连接数据库(注册了两次,没必要)

       * @throws Exception

       */

      @Test

      public void test2() throws Exception{

           Driver driver = new com.mysql.jdbc.Driver();

           //Driver driver2 = new com.oracle.jdbc.Driver();

           //1.注册驱动程序(可以注册多个驱动程序)

           DriverManager.registerDriver(driver);

           //DriverManager.registerDriver(driver2);

          

           //2.连接到具体的数据库

           Connection conn = DriverManager.getConnection(url, user, password);

           System.out.println(conn);

          

      }

     

      /**

       * (推荐使用这种方式连接数据库)

       * 推荐使用加载驱动程序类  来 注册驱动程序

       * @throws Exception

       */

      @Test

      public void test3() throws Exception{

           //Driver driver = new com.mysql.jdbc.Driver();

          

           //通过得到字节码对象的方式加载静态代码块,从而注册驱动程序

           Class.forName("com.mysql.jdbc.Driver");

          

           //Driver driver2 = new com.oracle.jdbc.Driver();

           //1.注册驱动程序(可以注册多个驱动程序)

           //DriverManager.registerDriver(driver);

           //DriverManager.registerDriver(driver2);

          

           //2.连接到具体的数据库

           Connection conn = DriverManager.getConnection(url, user, password);

           System.out.println(conn);

          

      }

 

}