JavaEE JDBC 怎么加载驱动

JDBC怎么加载驱动

@author ixenos

 

 

分析


 

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

 

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

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

 

 

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


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

 

 

 

代码


 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
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);
 
           
 
      }
 
  
 
}

  

 

posted @   ixenos  阅读(2108)  评论(0编辑  收藏  举报
编辑推荐:
· 软件产品开发中常见的10个问题及处理方法
· .NET 原生驾驭 AI 新基建实战系列:向量数据库的应用与畅想
· 从问题排查到源码分析:ActiveMQ消费端频繁日志刷屏的秘密
· 一次Java后端服务间歇性响应慢的问题排查记录
· dotnet 源代码生成器分析器入门
阅读排行:
· ThreeJs-16智慧城市项目(重磅以及未来发展ai)
· .NET 原生驾驭 AI 新基建实战系列(一):向量数据库的应用与畅想
· Browser-use 详细介绍&使用文档
· 软件产品开发中常见的10个问题及处理方法
· Vite CVE-2025-30208 安全漏洞
点击右上角即可分享
微信分享提示