随笔 - 1162  文章 - 0  评论 - 16  阅读 - 59万 

一、数据库连接要素一:Driver接口实现类

  1、Driver 接口介绍

    java.sql.Driver 接口是所有 JDBC 驱动程序需要实现的接口。这个接口是提供给数据库厂商使用的,不同数据库厂商提供不同的实现。

    在程序中不需要直接去访问实现了 Driver 接口的类,而是由驱动程序管理类(java.sql.DriverManager)去调用这些 Driver 实现。

    ① Oracle 的驱动:oracle.jdbc.driver.OracleDriver

    ② MySQL 的驱动:com.mysql.jdbc.Driver

    

 

 

      

 

     可以将上述 jar 包拷贝到 Java 工程的一个目录中,一般都会创建一个 lib 文件夹。

    

 

 

     在驱动 jar 包上右键 --> Build Path --> Add to Build Path

    

 

 

     注意:如果是 Dynamic Web Project(动态的 web 项目)话,则是把驱动 jar 放到 WebContent(有的开发工具叫 WebRoot)目录中的 WEB-INF 目录中的 lib 目录下即可。

      

 

 

 

  2、加载与注册 JDBC 驱动

    加载驱动:加载 JDBC 驱动需调用 Class  类的静态方法 forName(),向其传递要加载的 JDBC 驱动的类名。

1
Class.forName(“com.mysql.jdbc.Driver”);

  

    注册驱动:DriverManager 类是驱动程序管理器类,负责管理驱动程序

      (1)使用 DriverManager.registerDriver() 来注册驱动

      (2)通常不用显示调用 DriverManager 类的 registerDriver() 方法来注册驱动程序类的实例,因为 Driver 接口的驱动程序类都包含了静态代码块,在这个静态代码块中,会调用 DriverManager.registerDriver() 方法来注册自身的一个实例。

        下图是 MySQL 的 Driver 实现类的源码:

        

 

 

 

 

 

二、数据库连接要素二:URL

  JDBC URL 用于标识一个被注册的驱动程序,驱动程序管理器通过这个 URL 选择正确的驱动程序,从而建立到数据库的连接。

  JDBC URL 的标准由三部分组成,各个部分间冒号分隔。

jdbc:子协议:子名称

协议:JDBC URL 中的协议总是 jdbc

子协议:子协议用于标识一个数据库驱动程序

子名称:一种标识数据库的方法。子名称可以依不同的子协议而变化,用子名称的目的是为了定位数据库提供足够的信息。包含主机名(对应服务端的 IP地址),端口号,数据库名

  例如:

    

 

 

   几种常用的数据库的 JDBC URL

    (1)MySQL 的连接 URL 编写方式

1
2
3
4
5
6
7
jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
 
jdbc:mysql://localhost:3306/test
 
jdbc:mysql://localhost:3306/test?seUnicode=true&characterEncoding=utf8(如果JDBC程序与服务器端的字符集不一致,会导致乱码,那么可以通过参数指定服务器端的字符集)
 
jdbc:mysql://localhost:3306/test?user=root&password=123456

  

    (2)Oracle9i 的连接 URL 编写方式

1
2
3
jdbc:oracle:thin:@主机名称:oracle服务端口号:数据库名称
 
jdbc:oracle:thin:@localhost:1521:test

  

    (3)SQLServer 的连接 URL 编写方式

1
2
3
jdbc:sqlserver://主机名称:sqlserver服务端口号:DatabaseName=数据库名称
 
jdbc:sqlserver://localhost:1433:DatabaseName=test

  

 

三、数据库连接要素三:用户名和密码

  user, password 可以用 "属性名=属性值" 方式告诉数据库;

  可以调用 DriverManager 类的 getConnecion() 方法建立到数据库的连接

四、数据库连接方式

  1、连接方式一

复制代码
 1     @Test
 2     public void testConnection1() {
 3         try {
 4             //1.提供java.sql.Driver接口实现类的对象
 5             Driver driver = null;
 6             driver = new com.mysql.jdbc.Driver();
 7 
 8             //2.提供url,指明具体操作的数据
 9             String url = "jdbc:mysql://localhost:3306/test";
10 
11             //3.提供Properties的对象,指明用户名和密码
12             Properties info = new Properties();
13             info.setProperty("user", "root");
14             info.setProperty("password", "root");
15 
16             //4.调用driver的connect(),获取连接
17             Connection conn = driver.connect(url, info);
18             System.out.println(conn);
19         } catch (SQLException e) {
20             e.printStackTrace();
21         }
22     }
复制代码

 

    说明:上述代码中显示出现了第三方数据库的 API;

 

  2、连接方式二

复制代码
 1     @Test
 2     public void testConnection2() {
 3         try {
 4             //1.实例化Driver
 5             String className = "com.mysql.jdbc.Driver";
 6             Class clazz = Class.forName(className);
 7             Driver driver = (Driver) clazz.newInstance();
 8 
 9             //2.提供url,指明具体操作的数据
10             String url = "jdbc:mysql://localhost:3306/test";
11 
12             //3.提供Properties的对象,指明用户名和密码
13             Properties info = new Properties();
14             info.setProperty("user", "root");
15             info.setProperty("password", "abc123");
16 
17             //4.调用driver的connect(),获取连接
18             Connection conn = driver.connect(url, info);
19             System.out.println(conn);
20 
21         } catch (Exception e) {
22             e.printStackTrace();
23         }
24     }
复制代码

 

    说明:相较于方式一,这里使用反射实例化 Driver,不在代码中体现第三方数据库的 API。体现了面向接口编程思想,同时使得程序更好的可移植性。

 

  3、连接方式三

复制代码
 1     @Test
 2     public void testConnection3() {
 3         try {
 4             //1.数据库连接的4个基本要素:
 5             String url = "jdbc:mysql://localhost:3306/test";
 6             String user = "root";
 7             String password = "abc123";
 8             String driverName = "com.mysql.jdbc.Driver";
 9 
10             //2.实例化Driver
11             Class clazz = Class.forName(driverName);
12             Driver driver = (Driver) clazz.newInstance();
13             //3.注册驱动
14             DriverManager.registerDriver(driver);
15             //4.获取连接
16             Connection conn = DriverManager.getConnection(url, user, password);
17             System.out.println(conn);
18         } catch (Exception e) {
19             e.printStackTrace();
20         }
21 
22     }
复制代码

 

 

  4、连接方式四

复制代码
 1     @Test
 2     public void testConnection4() {
 3         try {
 4             //1.数据库连接的4个基本要素:
 5             String url = "jdbc:mysql://localhost:3306/test";
 6             String user = "root";
 7             String password = "abc123";
 8             String driverName = "com.mysql.jdbc.Driver";
 9 
10             //2.加载驱动 (①实例化Driver ②注册驱动)
11             Class.forName(driverName);
12 
13 
14             //Driver driver = (Driver) clazz.newInstance();
15             //3.注册驱动
16             //DriverManager.registerDriver(driver);
17             /*
18             可以注释掉上述代码的原因,是因为在mysql的Driver类中声明有:
19             static {
20                 try {
21                     DriverManager.registerDriver(new Driver());
22                 } catch (SQLException var1) {
23                     throw new RuntimeException("Can't register driver!");
24                 }
25             }
26 
27              */
28 
29 
30             //3.获取连接
31             Connection conn = DriverManager.getConnection(url, user, password);
32             System.out.println(conn);
33         } catch (Exception e) {
34             e.printStackTrace();
35         }
36 
37     }
复制代码

 

    说明:不必显示的注册驱动了。因为在 Driver 的源码中已经存在静态代码块,实现了驱动的注册。

 

  5、连接方式五

复制代码
 1     @Test
 2     public  void testConnection5() throws Exception {
 3         //1.加载配置文件
 4         InputStream is = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");
 5         Properties pros = new Properties();
 6         pros.load(is);
 7         
 8         //2.读取配置信息
 9         String user = pros.getProperty("user");
10         String password = pros.getProperty("password");
11         String url = pros.getProperty("url");
12         String driverClass = pros.getProperty("driverClass");
13 
14         //3.加载驱动
15         Class.forName(driverClass);
16 
17         //4.获取连接
18         Connection conn = DriverManager.getConnection(url,user,password);
19         System.out.println(conn);
20 
21     }
复制代码

 

    其中,配置文件声明在工程的 src 目录下:【jdbc.properties】

1
2
3
4
user=root
password=abc123
url=jdbc:mysql://localhost:3306/test
driverClass=com.mysql.jdbc.Driver

      说明:使用配置文件的方式保存配置信息,在代码中加载配置文件。

    使用配置文件好处:

    ① 实现了代码和数据的分离,实现了解耦,如果需要修改配置信息,直接在配置文件中修改,不需要深入代码;

    ② 如果修改了配置信息,省去重新编译的过程;

    

 

posted on   格物致知_Tony  阅读(653)  评论(0编辑  收藏  举报
编辑推荐:
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· .NET Core 托管堆内存泄露/CPU异常的常见思路
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· C# 集成 DeepSeek 模型实现 AI 私有化(本地部署与 API 调用教程)
· DeepSeek R1 简明指南:架构、训练、本地部署及硬件要求
· 没有源码,如何修改代码逻辑?
· NetPad:一个.NET开源、跨平台的C#编辑器
历史上的今天:
2020-07-10 排序算法——希尔排序
点击右上角即可分享
微信分享提示

目录导航