JDBC基本教程之概述
副标题#e#
1.1 什么是 JDBCTM?
JDBCTM 是一种用于执行 SQL 语句的 JavaTM API(有意思的是,JDBC 自己是个商标名而不是一个缩写字;然而,JDBC常被认为是代表 “Java 数据库毗连 (Java Database Connectivity)”)。它由一组用 Java 编程语言编写的类和接口构成。JDBC 为东西/数据库开拓人员提供了一个尺度的 API,使他们可以或许用纯Java API 来编写数据库应用措施。
有了 JDBC,向各类干系数据库发送 SQL 语句就是一件很容易的事。换言之,有了JDBC API,就不必为会见 Sybase 数据库专门写一个措施,为会见 Oracle 数据库又专门写一个措施,为会见Informix 数据库又写另一个措施,等等。您只需用 JDBC API 写一个措施就够了,它可向相应数据库发送 SQL 语句。并且,利用 Java 编程语言编写的应用措施,就无须去忧虑要为差异的平台编写差异的应用措施。将 Java 和 JDBC 团结起来将使措施员只须写一遍措施就可让它在任何平台上运行。
Java 具有健壮、安详、易于利用、易于领略和可从网络上自动下载等特性,是编写数据库应用措施的精巧语言。所需要的只是 Java 应用措施与各类差异数据库之间举办对话的要领。而 JDBC 正是作为此种用途的机制。
JDBC 扩展了 Java 的成果。譬喻,用 Java 和 JDBC API 可以宣布含有 applet的网页,而该 applet 利用的信息大概来自长途数据库。企业也可以用 JDBC 通过Intranet 将所有职员连到一个或多个内部数据库中(纵然这些职员所用的计较机有 Windows、 Macintosh 和 UNIX 等各类差异的操纵系统)。跟着越来越多的措施员开始利用 Java 编程语言,对从 Java中便捷地会见数据库的要求也在日益增加。
MIS 打点员们都喜欢 Java 和 JDBC 的团结,因为它使信息流传变得容易和经济。企业可继承利用它们安装好的数据库,并能便捷地存取信息,纵然这些信息是储存在差异数据库打点系统上。新措施的开拓期很短。安装和版本节制将大为简化。措施员可只编写一遍应用措施或只更新一次,然后将它放随处事器上,随后任何人就都可获得最新版本的应用措施。对付商务上的销售信息处事, Java 和 JDBC 可为外部客户提供获取信息更新的更好要领。
1.1.1 JDBC 的用途是什么?
简朴地说,JDBC 可做三件事:
与数据库成立毗连,
发送 SQL 语句,
处理惩罚功效。
下列代码段给出了以上三步的根基示例:
Connection con = DriverManager.getConnection ("jdbc:odbc:wombat", "login", "password");
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next())
System.out.println(rs.getString("a") + " " + rs.getString("b") + " " + rs.getString("c"));
1.1.2 JDBC 是一种初级 API ,是高级 API 的基本
JDBC 是个“初级”接口,也就是说,它用于直接挪用 SQL 呼吁。在这方面它的成果极佳,并比其它的数据库毗连 API 易于利用,但它同时也被设计为一种基本接口,在它之上可以成立高级接口和东西。
高级接口是“对用户友好的”接口,它利用的是一种更易领略和更为利便的 API,这种 API 在幕后被转换为诸如 JDBC 这样的初级接口。在编写本文时,正在开拓两种基于 JDBC 的高级 API:
一种用于 Java 的嵌入式 SQL。至少已经有一个提供者打算编写它。DBMS 实现SQL:一种专门设计来与数据库连系利用的语言。JDBC 要求 SQL 语句必需作为 String 传给 Java 要领。相反,嵌入式 SQL预处理惩罚器答允措施员将 SQL 语句直接与Java 混在一起利用。譬喻,可在 SQL 语句中利用 Java 变量,用以接管或提供SQL 值。然后,嵌入式 SQL 预处理惩罚器将通过 JDBC 挪用把这种 Java/SQL 的殽杂物转换为Java。干系数据库表到 Java 类的直接映射。JavaSoft 和其它提供者都声称要实现该API。在这种“工具/干系”映射中,表中的每行对应于类的一个实例,而每列的值对应于该实例的一个属性。于是,措施员可直接对 Java 工具举办操纵;存取数据所需的 SQL 挪用将在“掩盖下”自动生成。另外还可提供更巨大的映射,譬喻将多个表中的行团结进一个 Java 类中。
跟着人们对 JDBC 的乐趣日益增涨,越来越多的开拓人员一直在利用基于 JDBC 的东西,以使措施的编写越发容易。措施员也一直在编写力求使最终用户对数据库的会见变得更为简朴的应用措施。譬喻,应用措施可提供一个选择数据库任务的菜单。任务被选定后,应用措施将给出提示及空缺供填写执行选定任务所需的信息。所需信息输入后,应用措施将自动挪用所需的SQL 呼吁。在这样一种措施的协助下,纵然用户基础不懂 SQL 的语法,也可以执行数据库任务。
#p#副标题#e#
1.1.3 JDBC 与 ODBC 和其它 API 的较量
#p#分页标题#e#
今朝,Microsoft 的 ODBC(开放式数据库毗连)API 大概是利用最广的、用于会见干系数据库的编程接口。它能在险些所有平台上毗连险些所有的数据库。为什么Java 不利用 ODBC?
对这个问题的答复是:Java 可以利用 ODBC,但最好是在 JDBC 的辅佐下以JDBC-ODBC 桥的形式利用,这一点我们稍后再说。此刻的问题已酿成:“为什么需要 JDBC”? 答复如下:ODBC 不适合直接在 Java 中利用,因为它利用 C 语言接口。从 Java 挪用当地 C 代码在安详性、实现、健壮性和措施的自动移植性方面都有很多缺点。
从 ODBC API 到 Java API 的字面翻译是不行取的。譬喻,Java 没有指针,而 ODBC 却对指针用得很遍及(包罗很容易堕落的指针 "void *")。您可以将 JDBC 想象成被转换为面向工具接口的 ODBC,而面向工具的接口对 Java 措施员来说较易于吸收。ODBC 很难学。它把简朴和高级成果混在一起,并且纵然对付简朴的查询,其选项也极为巨大。相反,JDBC 只管担保简朴成果的轻便性,而同时在须要时答允利用高级成果。启用“纯 Java ”机制需要象 JDBC 这样的 Java API。假如利用 ODBC,就必需手动地将 ODBC 驱动措施打点器和驱动措施安装在每台客户机上。假如完全用 Java 编写 JDBC 驱动措施则 JDBC 代码在所有 Java 平台上(从网络计较机到大型机)都可以自动安装、移植并担保安详性。
总之,JDBC API 对付根基的 SQL 抽象和观念是一种自然的 Java 接口。它成立在 ODBC 上而不是从零开始。因此,熟悉ODBC 的措施员将发明 JDBC 很容易利用。JDBC 保存了 ODBC 的根基设计特征;事实上,两种接口都基于 X/Open SQL CLI(挪用级接口)。它们之间最大的区别在于:JDBC 以 Java 气势气魄与利益为基本并举办优化,因此越发易于利用。
最近,Microsoft 又引进了 ODBC 之外的新 API: RDO、 ADO 和 OLE DB。这些设计在很多方面与 JDBC 是沟通的,即它们都是面向工具的数据库接口且基于可在ODBC 上实现的类。但在这些接口中,我们未瞥见有出格的成果使我们要转而选择它们来替代 ODBC,尤其是在 ODBC 驱动措施已成立起较为完善的市场的环境下。它们最多也就是在 ODBC 上加了一种装饰罢了。这并不是说 JDBC 不需要从其最初的版本再成长了;然而,我们以为大部份的新成果应归入诸如前一节中所述的工具/干系映射和嵌入式 SQL 这样的高级 API。
1.1.4 两层模子和三层模子
JDBC API 既支持数据库会见的两层模子,同时也支持三层模子。
在两层模子中,Java applet 或应用措施将直接与数据库举办对话。这将需要一个 JDBC 驱动措施来与所会见的特定命据库打点系统举办通讯。用户的 SQL 语句被送往数据库中,而其功效将被送回给用户。数据库可以位于另一台计较机上,用户通过网络毗连到上面。这就叫做客户机/处事器设置,其顶用户的计较机为客户机,提供数据库的计较机为处事器。网络可以是 Intranet(它可将公司职员毗连起来),也可以是 Internet。
在三层模子中,呼吁先是被发送随处事的“中间层”,然后由它将 SQL 语句发送给数据库。数据库对 SQL 语句举办处理惩罚并将功效送回到中间层,中间层再将功效送回给用户。MIS 主管们都发明三层模子很吸引人,因为可用中间层来节制对公司数据的会见和可作的的更新的种类。中间层的另一个长处是,用户可以操作易于利用的高级API,而中间层将把它转换为相应的初级挪用。最后,很多环境下三层布局可提供一些机能上的长处。
到今朝为止,中间层凡是都用 C 或 C++ 这类语言来编写,这些语言执行速度较快。然而,跟着最优化编译器(它把 Java字节代码转换为高效的特定于呆板的代码)的引入,用 Java 来实现中间层将变得越来越实际。这将是一个很大的进步,它使人们可以充实操作 Java 的诸多利益(如健壮、多线程和安详等特征)。JDBC对付从 Java 的中间层来会见数据库很是重要。
1.1.5 SQL 的一致性
布局化查询语言 (SQL) 是会见干系数据库的尺度语言。坚苦之处在于:固然大大都的 DBMS (数据库打点系统)对其根基成果都利用了尺度形式的 SQL,但它们却不切合最近为更高级的成果界说的尺度SQL 语法或语义。譬喻,并非所有的数据库都支持储存措施或外部毗连,那些支持这一成果的数据库又彼此纷歧致。人们但愿 SQL 中真正尺度的那部份可以或许举办扩展以包罗越来越多的成果。但同时 JDBC API 又必需支持现有的 SQL。
#p#分页标题#e#
JDBC API 办理这个问题的一种要领是答允将任何查询字符串一直传到所涉及的DBMS 驱动措施上。这意味着应用措施可以利用任意多的 SQL 成果,但它必需冒这样的风险:有大概在某些 DBMS 上堕落。事实上,应用措施查询甚至不必然要是SQL,可能说它可以是个为特定的 DBMS 设计的 SQL 的专用派生物(譬喻,文档或图象查)。
JDBC 处理惩罚 SQL 一致性问题的第二种要领是提供 ODBC 气势气魄的转义子句。这将在4.1.5 节“语句工具中的 SQL 转义语法”中接头。
转义语法为几个常见的 SQL 分歧提供了一种尺度的 JDBC 语法。譬喻,对日期文字和已储存进程的挪用都有转义语法。
对付巨大的应用措施,JDBC 用第三种要领来处理惩罚 SQL 的一致性问题。它操作DatabaseMetaData 接口来提供关于 DBMS 的描写性信息,从而使应用措施能适应每个 DBMS 的要求和成果。
由于 JDBC API 将用作开拓高级数据库会见东西和 API 的基本 API,因此它还必需留意其所有上层修建的一致性。“切合JDBC 尺度TM" 代表用户可依赖的 JDBC 成果的尺度级别。要利用这一说明,驱动措施至少必需支持 ANSI SQL-2 EntryLevel(ANSI SQL-2 代表美国国度尺度局 1992 年所回收的尺度。Entry Level 代表SQL 成果的特定清单)。驱动措施开拓人员可用 JDBC API 所带的测试东西包来确定他们的驱动措施是否切合这些尺度。
“切合 JDBC 尺度TM” 暗示提供者的 JDBC 实现已经通过了 JavaSoft 提供的一致性测试。这些一致性测试将查抄 JDBCAPI 中界说的所有类和要领是否都存在,并尽大概地查抄措施是否具有 SQL Entry Level 成果。虽然,这些测试并不完全,并且 JavaSoft 今朝也无意对各提供者的实现举办标级。但这种一致性界说简直可对JDBC 实现提供必然的可信度。跟着越来越多的数据库提供者、毗连提供者、Internet 提供者和应用措施编程员对 JDBC API 的接管,JDBC 也正迅速成为 Java数据库会见的尺度。
1.2 JDBC 产物
在编写本文时,有几个基于 JDBC 的产物已开拓完毕或正在开拓中。虽然,本节中的信息将很快成为过期信息。因此,有关最新的信息,请查阅 JDBC 的网站,可通过从以下 URL 开始欣赏找到:
http://java.sun.com/products/jdbc
1.2.1 JavaSoft 框架
JavaSoft 提供三种 JDBC 产物组件,它们是 Java 开拓东西包 (JDK) 的构成部份:JDBC 驱动措施打点器,JDBC 驱动措施测试东西包,和JDBC-ODBC 桥。
JDBC 驱动措施打点器是 JDBC 体系布局的支柱。它实际上很小,也很简朴;其主要浸染是把 Java 应用措施毗连到正确的JDBC 驱动措施上,然后即退出。
JDBC 驱动措施测试东西包为使 JDBC 驱动措施运行您的措施提供必然的可信度。只有通过 JDBC 驱动措施测试包的驱动措施才被认为是切合 JDBC 尺度TM 的。
JDBC-ODBC 桥使 ODBC 驱动措施可被用作 JDBC 驱动措施。它的实现为 JDBC 的快速成长提供了一条途径,其久远方针提供一种会见某些不常见的 DBMS(假如对这些不常见的 DBMS 未实现 JDBC) 的要领。
1.2.2 JDBC 驱动措施的范例
我们今朝所知晓的 JDBC 驱动措施可分为以下四个种类:
JDBC-ODBC 桥加 ODBC 驱动措施:JavaSoft 桥产物操作 ODBC 驱动措施提供 JDBC 会见。留意,必需将 ODBC 二进制代码(很多环境下还包罗数据库客户机代码)加载到利用该驱动措施的每个客户机上。因此,这种范例的驱动措施最适合于企业网(这种网络上客户机的安装不是主要问题),可能是用 Java 编写的三层布局的应用措施处事器代码。
当地 API – 部份用 Java 来编写的驱动措施: 这种范例的驱动措施把客户机 API 上的 JDBC 挪用转换为 Oracle、Sybase、Informix、DB2 或其它 DBMS 的挪用。留意,象桥驱动措施一样,这种范例的驱动措施要求将某些二进制代码加载到每台客户。
JDBC 网络纯 Java 驱动措施:这种驱动措施将 JDBC 转换为与 DBMS 无关的网络协议,之后这种协议又被某个处事器转换为一种 DBMS 协议。这种网络处事器中间件可以或许将它的纯 Java 客户机毗连到多种差异的数据库上。所用的详细协议取决于提供者。凡是,这是最为机动的 JDBC 驱动措施。有大概所有这种办理方案的提供者都提供适合于 Intranet 用的产物。为了使这些产物也支持 Internet 会见,它们必需处理惩罚 Web 所提出的安详性、通过防火墙的会见等方面的特别要求。几家提供者正将 JDBC 驱动措施加到他们现有的数据库中间件产物中。
当地协议纯 Java 驱动措施:这种范例的驱动措施将 JDBC 挪用直接转换为DBMS 所利用的网络协议。这将答允从客户机呆板上直接挪用 DBMS 处事器,是 Intranet 会见的一个很实用的办理要领。由于很多这样的协议都是专用的,因此数据库提供者本身将是主要来历,有几家提供者已在着手做这件事了。最后,我们估量第 3、4 类驱动措施将成为从 JDBC 会见数据库的首选要领。第1、2 类驱动措施在直接的纯 Java 驱动措施还没有上市前将会作为过渡方案来利用。对第 1、2 类驱动措施大概会有一些变种,这些变种要求有毗连器,但凡是这些是越发不行取的办理方案。第 3、4 类驱动措施提供了 Java 的所有利益,包罗自动安装(譬喻,通过利用 JDBC 驱动措施的 applet applet来下载该驱动措施)。