热门标签 | HotTags
当前位置:  开发笔记 > 数据库 > 正文

JDBCTM指南:入门3

内容:3
JDBCJDBCTM

内容:
3 - DriverManager
3.1 概述
DriverManager 类是 JDBC 的管理层,作用于用户和驱动程序之间。
它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。
另外,DriverManager 类也处理诸如驱动程序登录时间限制及登录和
跟踪消息的显示等事务。

对于简单的应用程序,一般程序员需要在此类中直接使用的唯一方法
是 DriverManager.getConnection。正如名称所示,该方法将建立与
数据库的连接。JDBC 允许用户调用 DriverManager 的方法
getDriver、getDrivers 和 registerDriver 及 Driver 的方法
connect。但多数情况下,让 DriverManager 类管理建立连接的细
节为上策。


3.1.1 跟踪可用驱动程序
DriverManager 类包含一列 Driver 类,它们已通过调用方法
DriverManager.registerDriver 对自己进行了注册。所有 Driver

类都必须包含有一个静态部分。它创建该类的实例,然后在加载该
实例时 DriverManager 类进行注册。这样,用户正常情况下将不会
直接调用 DriverManager.registerDriver;而是在加载驱动程序时
由驱动程序自动调用。加载 Driver 类,然后自动在 DriverManager
中注册的方式有两种:


通过调用方法 Class.forName。这将显式地加载驱动程序类。由于这
与外部设置无关,因此推荐使用这种加载驱动程序的方法。以下代码
加载类 acme.db.Driver:
Class.forName("acme.db.Driver");

如果将 acme.db.Driver 编写为加载时创建实例,并调用以该实例为
参数的 DriverManager.registerDriver(本该如此),则它在
DriverManager 的驱动程序列表中,并可用于创建连接。


通过将驱动程序添加到 java.lang.System 的属性 jdbc.drivers 中
这是一个由 DriverManager 类加载的驱动程序类名的列表,由冒号
分隔:初始化 DriverManager 类时,它搜索系统属性 jdbc.drivers,
如果用户已输入了一个或多个驱动程序,则 DriverManager 类将试图加载它们。
以下代码说明程序员如何在 ~/.hotjava/properties 中输入三个驱动程序类(
启动时,HotJava 将把它加载到系统属性列表中):
jdbc.drivers=foo.bah.Driver:wombat.sql.Driver:bad.test.ourDriver;

对 DriverManager 方法的第一次调用将自动加载这些驱动程序类。

注意:加载驱动程序的第二种方法需要持久的预设环境。如果对这一点不能
保证,则调用方法 Class.forName 显式地加载每个驱动程序就显得更为
安全。这也是引入特定驱动程序的方法,因为一旦 DriverManager 类被初始化,它
将不再检查 jdbc.drivers 属性列表。

在以上两种情况中,新加载的 Driver 类都要通过调用 DriverManager.registerDriver
类进行自我注册。如上所述,加载类时将自动执行这一过程。

由于安全方面的原因,JDBC 管理层将跟踪哪个类加载器提供哪
个驱动程序。这样,当 DriverManager 类打开连接时,它仅使用
本地文件系统或与发出连接请求的代码相同的类加载器提供的驱动程序。


3.1.2 建立连接
加载 Driver 类并在 DriverManager 类中注册后,它们即可用来与数
据库建立连接。当调用 DriverManager.getConnection 方法发出连接
请求时,DriverManager 将检查每个驱动程序,查看它是否可以建立连接。

有时可能有多个 JDBC 驱动程序可以与给定的 URL 连接。例如,与
给定远程数据库连接时,可以使用 JDBC-ODBC 桥驱动程序、JDBC 到
通用网络协议驱动程序或数据库厂商提供的驱动程序。在这种情况下

推荐阅读
  • MySQL 数据库迁移指南:从本地到远程及磁盘间迁移
    本文详细介绍了如何在不同场景下进行 MySQL 数据库的迁移,包括从一个硬盘迁移到另一个硬盘、从一台计算机迁移到另一台计算机,以及解决迁移过程中可能遇到的问题。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 数据库内核开发入门 | 搭建研发环境的初步指南
    本课程将带你从零开始,逐步掌握数据库内核开发的基础知识和实践技能,重点介绍如何搭建OceanBase的开发环境。 ... [详细]
  • 使用C#开发SQL Server存储过程的指南
    本文介绍如何利用C#在SQL Server中创建存储过程,涵盖背景、步骤和应用场景,旨在帮助开发者更好地理解和应用这一技术。 ... [详细]
  • 利用存储过程构建年度日历表的详细指南
    本文将介绍如何使用SQL存储过程创建一个完整的年度日历表。通过实例演示,帮助读者掌握存储过程的应用技巧,并提供详细的代码解析和执行步骤。 ... [详细]
  • SQLite 动态创建多个表的需求在网络上有不少讨论,但很少有详细的解决方案。本文将介绍如何在 Qt 环境中使用 QString 类轻松实现 SQLite 表的动态创建,并提供详细的步骤和示例代码。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 并发编程:深入理解设计原理与优化
    本文探讨了并发编程中的关键设计原则,特别是Java内存模型(JMM)的happens-before规则及其对多线程编程的影响。文章详细介绍了DCL双重检查锁定模式的问题及解决方案,并总结了不同处理器和内存模型之间的关系,旨在为程序员提供更深入的理解和最佳实践。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细分析了JSP(JavaServer Pages)技术的主要优点和缺点,帮助开发者更好地理解其适用场景及潜在挑战。JSP作为一种服务器端技术,广泛应用于Web开发中。 ... [详细]
  • 优化ListView性能
    本文深入探讨了如何通过多种技术手段优化ListView的性能,包括视图复用、ViewHolder模式、分批加载数据、图片优化及内存管理等。这些方法能够显著提升应用的响应速度和用户体验。 ... [详细]
  • Valve 发布 Steam Deck 的新版 Windows 驱动程序
    Valve 最新发布了针对 Steam Deck 掌机的 Windows 驱动程序,旨在提升其在 Windows 环境下的兼容性、安全性和性能表现。 ... [详细]
  • 在计算机技术的学习道路上,51CTO学院以其专业性和专注度给我留下了深刻印象。从2012年接触计算机到2014年开始系统学习网络技术和安全领域,51CTO学院始终是我信赖的学习平台。 ... [详细]
author-avatar
迷恋当年的超女
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有