JDBC是Java用于访问各种数据库DBMS的标准方法,由JDBC驱动程序和JDBC API两部分组成。
一、JDBC驱动程序
Java程序对特定数据库的访问操作,要被与其对应的JDBC驱动程序翻译成该数据库的本地操作才能实现,所以JDBC驱动程序担当了一个翻译器的角色。不同的数据库拥有不同的JDBC驱动程序,JDBC提供一个java.sql.Driver接口,各个数据库厂商根据自己数据库产品的特点来实现这个接口(即不同数据库产品的JDBC驱动由其本身提供),Java程序仅通过标准接口来访问各种数据库,从而实现代码的数据库平台无关性。在Java程序访问数据之前,需要通过Class.forName("")的方式来装载JDBC驱动程序(例如Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"),之所以用Class.forName而没有用ClassLoader.load(),就是因为需要JVM完成Driver的初始化工作,而不仅仅是装载),然后通过一个统一的工厂类Java.sql.DriverManager来取得数据库连接,并执行各种操作。
JDBC驱动程序根据其实现方式分为4种类型,我从网上找了篇说明,如下:
1、JDBC-ODBC bridge plus ODBC driver: JDBC-ODBC桥驱动程序,将JDBC调用转换为ODBC的调用。( This combination provides JDBC access via ODBC drivers. ODBC binary code--and in many cases, database client code-- must be loaded on each client machine that uses a JDBC-ODBC Bridge. Sun provides a JDBC-ODBC Bridge driver, which is appropriate for experimental use and for situations in which no other driver is available.)注意,必须将ODBC二进制代码(许多情况下还包括数据库客户机代码)加载到使用该驱动程序的每个客户机上。这种类型的驱动程序最适合于企业网(这种网络上客户机的安装不是主要问题),或者是用Java编写的三层结构的应用程序服务器代码。
2、Native-API partly-Java driver: 将JDBC调用转换为对数据库客户端API的调用。(A native-API partly Java technology-enabled driver: This type of driver converts JDBC calls into calls on the client API for Oracle, Sybase, Informix, DB2, or other DBMS. Note that, like the bridge driver, this style of driver requires that some binary code be loaded on each client machine.)这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle、Sybase、Informix、DB2或其它DBMS的调用。注意,象桥驱动程序一样,这种类型的驱动程序要求将某些二进制代码加载到每台客户机上。
3、 Pure Java Driver for Database Middleware: 先将JDBC调用转换为DBMS-independent网络协议,然后由服务器端的中间件转换为具体数据库服务器可以接收的网络协议。(net- protocol fully Java technology-enabled driver #This style of driver translates JDBC calls into the middleware vendor's protocol, which is then translated to a DBMS protocol by a middleware server. The middleware provides connectivity to many different databases.)这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的 JDBC驱动程序。有可能所有这种解决方案的提供者都提供适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必须处理 Web所提出的安全性、通过防火墙的访问等方面的额外要求。几家提供者正将JDBC驱动程序加到他们现有的数据库中间件产品中。
4、 Direct-to-Database Pure Java Driver: 将JDBC调用直接转换为具体数据库服务器可以接收的网络协议。(native-protocol fully Java technology-enabled driver #This style of driver converts JDBC calls into the network protocol used directly by DBMSs, allowing a direct call from the client machine to the DBMS server and providing a practical solution for intranet access.)这将允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。由于许多这样的协议都是专用的,因此数据库提供者自己将是主要来源,有几家提供者已在着手做这件事了。
第3、4类驱动程序将成为从JDBC访问数据库的首选方法。第1、2类驱动程序在直接的纯Java驱动程序还没有上市前将会作为过渡方案来使用。对第1、 2类驱动程序可能会有一些变种,这些变种要求有连接器,但通常这些是更加不可取的解决方案。第3、4类驱动程序提供了Java的所有优点,包括自动安装(例如,通过使用JDBC驱动程序的applet 来下载该驱动程序)。
从这篇文章,我们可以看出,第1类JDBC-ODBC桥的方式主要是Sun公司为了Java程序方便访问已有ODBC数据源而提供的,由于要经过JDBC、ODBC两次翻译才能访问到DBMS,因此性能和效率不高。第2类,需要在本地安装数据库的客户端程序,由Java程序通过JDBC驱动访问数据库客户端API来执行数据库操作,说白了就是模拟你用数据库客户端程序远程操作数据库时的操作,可见效率也不高。第3类和第4类应该是目前常用的方式,即通过协议直接访问数据库服务器DBMS,效率也最高,而这两种方式的安全性有所差别。
二、JDBC API
JDBC API由核心Java API和扩展Java API两部分组成。核心API位于java.sql包中,包括建立DBMS连接和访问DBMS数据所需的基本Java数据对象;扩展API位于javax.sql包中,是J2EE的一部分,包括一些JDBC高级特性(如数据库连接池管理),以及与JNDI进行交互的Java数据对象。Java程序使用JDBC API来访问JDBC驱动程序,JDBC驱动程序再把这些访问消息翻译成能被DBMS理解和处理的底层消息,并完成交互。
三、JDBC URL
Java程序访问数据库之前,需要先装载JDBC驱动程序(用Class.forName()的方式),然后,为了与指定的数据库/数据源建立连接,还需要用JDBC URL来告知数据库或数据源的位置。
JDBC URL 的格式如下:jdbc:<subprotocol>:<subname>
可见JDBC URL由三个部分组成:1、协议,由jdbc表示,它是唯一的,JDBC只有这一种协议;2、子协议(subprotocol),主要用于识别数据库驱动程序,也就是说,对于不同的数据库,这里要填写的驱动程序子协议不同;3、子名(subname),更进一步的参数,不同的数据库,这里要填的内容也不同,由各个数据库自己确定。
例如,对于Oracle数据库的访问,如下:
Class.forName("Oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:Oracle:thin:@主机:端口号:数据库名", "用户名", "密码");
四、其他
JDBC其他方面还包括事务处理和连接池等内容。
比如事务处理可以通过setAutoCommit()来设定自动提交事务,也可以通过Statement的addBatch()、executeBatch()的方式来批量处理操作并执行事务,还可以通过setSavepoint()、releaseSavepoint()的方式来增加临时保存点,这样事务回滚时可以通过rollback(savepoint)的方式来回滚到指定的保存点。
连接池方面,JDBC2.0后引入了数据源的概念,在JDBC扩展包中定义了javax.sql.DataSource接口,它是一个用于产生管理数据库连接的工厂。通常,J2EE应用服务器都提供了连接池的配置方法,配置后的数据源被绑定到JNDI名称空间,Java程序可以通过JNDI来访问。
以上就是我看书后,对JDBC的一些总结,现在有很多ORM的产品,如Hibernate,都对JDBC进行了封装,并提供了更灵活、更便捷的访问数据库的方式,不过了解一下JDBC本来的样子总还是有好处的。
分享到:
相关推荐
JDBC学习笔记 JDBC(Java DataBase Connectivity)是一种Java程序语言访问数据库的标准接口。它使得Java程序可以连接到各种不同的数据库管理系统,例如Oracle、SQL Server、MySQL、DB2、Sybase等。 JDBC的概念 ...
**JDBC学习笔记** 在Java开发中,JDBC(Java Database Connectivity)是连接数据库的关键技术。它是Java API,允许Java程序与各种类型的数据库进行交互。本笔记将深入探讨JDBC的核心概念、工作原理以及实际应用。 ...
### JDBC学习笔记知识点详解 #### 一、JDBC原理概述 **JDBC**(Java Database Connectivity)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC...
JDBC的学习笔记涵盖了从基本概念到实际操作的各个方面,对于初学者来说是一份很好的参考资料。通过学习JDBC,开发者能够有效地在Java应用程序中集成数据库功能,实现数据的增删改查以及与存储过程的交互。理解和掌握...
jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子
"JDBC学习笔记总结" JDBC(Java Database Connectivity)是一种Java API,用于连接和操作关系数据库。下面是JDBC学习笔记的总结: 连接到数据库的方法 1. ODBC(Open Database Connectivity):是一个以C语言为...
在本篇JDBC学习笔记中,我们将深入探讨JDBC的基础知识、核心概念以及实际应用。 一、JDBC基础 1. JDBC驱动程序:JDBC驱动是连接Java应用程序和数据库之间的桥梁。根据实现方式,JDBC驱动分为四种类型:类型1(JDBC...
总的来说,"达内jdbc学习笔记"涵盖了JDBC基础、数据库连接、SQL执行、结果集处理、事务管理和性能优化等多个关键知识点,对Java开发者来说是宝贵的参考资料。通过深入学习和实践,可以熟练地使用Java进行数据库操作...
jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子
jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子jdbc 学习 笔记 代码例子
本篇JDBC学习笔记将深入探讨JDBC的核心概念、操作步骤以及最佳实践。 **一、JDBC基本概念** 1. **驱动程序**:JDBC驱动程序是Java应用程序与数据库之间的桥梁,分为四种类型:JDBC-ODBC桥接驱动、本地API驱动、...
jdbc学习用笔记和代码例子jdbc学习用笔记和代码例子jdbc学习用笔记和代码例子
**JDBC学习笔记** Java Database Connectivity (JDBC) 是Java平台中用于与各种数据库进行交互的一组接口和类。它是Java SE的一部分,允许Java应用程序连接到数据库,执行SQL语句,处理结果集,并进行事务管理。这篇...
JDBC 学习笔记+代码整理
### 传智播客JDBC学习笔记精要 #### JDBC简述与连接 JDBC(Java Database Connectivity)是Java中用来规范客户端程序如何访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。在传智播客的JDBC...
**JDBC学习笔记教程文档** **一、JDBC概述** 1.1 **什么是JDBC** JDBC(Java Database Connectivity)是Java语言与各种数据库交互的一种标准接口,由Sun Microsystems公司开发,它允许Java应用程序通过Java代码来...
JDBC学习笔记.txt
Java开发 - 尚硅谷JDBC学习笔记是一套深入解析Java数据库连接(JDBC)技术的教程,涵盖了从基础到进阶的各种知识点。JDBC是Java编程语言中用于访问数据库的标准应用编程接口,它允许程序员使用Java来执行SQL语句,...