详谈myql中的JDBC驱动
有一本书《程序员突击–MySQL原理与Web系统开发》,这本书详细介绍了mysql中的JDBC,今天给大家讲讲JDBC是什么,方便大家在日后使用mysql时可以快捷使用JDBC。
《程序员突击–MySQL原理与Web系统开发》第6章JDBC基础,本章介绍JDBC的基本概念,包括JDBC基本功能、JDBC驱动的4种基本类型等;同时对传统的ODBC接口的体系结构以及数据源的配置方法进行介绍,阐述了JDBC与ODBC的异同,旨在加深读者对JDBC的了解。本节为大家介绍JDBC驱动。
6.1.3 JDBC驱动
JDBC的总体结构由4个组件构成,它们是:应用程序、驱动程序管理器、驱动程序和数据源,如图6-1所示。
图6-1JDBC总体结构图
(1)应用程序:用于发送或者接收数据。
(2)驱动程序管理器:处理数据源相应的驱动程序。
(3)驱动程序:提供数据源和应用程序之间的接口。
(4)数据源:SQL兼容数据库。
应用程序只需调用JDBCAPI,而由JDBC实现层(即JDBC驱动程序)去处理与数据库的通信,从而让应用程序不再受限于具体的数据库产品。如果想通过JDBC去连接某个特定的数据库系统,只需使用专门为这种数据库系统而开发的JDBC驱动程序,那么这些相关的JDBC驱动应该从哪里获得呢?实际上各大数据库厂商(Oracle、Sybase、DB2等)对JDBC都有很好的支持,它们的官方网站都提供了各种版本的下载。在第7章中,将学习Connector/J的相关知识,Connector/J就是MySQL数据库的JDBC驱动,学完之后,将会对这一概念有更具体的体会。
javaSoft将JDBC驱动程序细分为4大类,分别是JDBC/ODBCBridge、NativeAPIPartlyJava、NetProtocolAllJava和NativeProtocolAllJava。
Type1:本地APIJava驱动程序
大部分数据库厂商提供与他们的数据库产品进行通信所需要的API,这些API往往用C语言编写,依赖于具体的平台,本地APIJava驱动程序通过JDBC驱动程序将应用程序中的调用请求转化为本地API调用,由本地API与数据库通信,数据库处理完请求将结果通过本地API返回,进而返回给JDBC驱动程序,JDBC驱动程序将返回的结果转化为JDBC标准形式,再返回给客户程序,其工作原理如图6-3所示。
这种JDBC驱动的优点是减少了ODBC的调用环节,提高了数据访问的效率,并且能够充分利用厂商提供的本地API功能,但前提是需要在客户的机器上安装本地JDBC驱动程序和特定数据库厂商的本地API,这样就不适合基于Internet的应用,并且它的执行效率比起Type3和Type4型的JDBC驱动还是不够高。
Type2:JDBC-ODBC桥
如图8-1所示,JDBC-ODBC桥由SUN公司提供,是JDK提供的标准API。因为微软推出的ODBC比JDBC出现的时间早,且应用广泛,支持绝大多数的数据库,当SUN公司推出JDBC时,为了支持更多的数据库,Intersolv和JavaSoft联合开发JDBC-ODBC桥。这种类型的驱动实际是把所有JDBC的调用传递给ODBC,再由ODBC调用本地数据库驱动代码。只要本地机装有相关的ODBC驱动,那么采用JDBC-ODBC桥几乎可以访问所有的数据库,JDBC-ODBC方法对于客户端已经具备ODBCDriver的应用还是可行的。但由于JDBC-ODBC先调用ODBC,再由ODBC去调用本地数据库接口访问数据库,需要经过多层调用,所以执行效率比较低,对于那些大数据量存取的应用是不适合的。而且这种方法要求客户端必须安装ODBC驱动,所以对于基于Internet、Intranet的应用是不现实的。
(点击查看大图)图8-1JDBC-ODBC桥
JDBC-ODBC桥比”纯”ODBC多了几项优势:ODBCAPI主要面向C/C++程序员,它使Java程序员无须应付非Java概念。ODBCAPI非常复杂,它把高级功能和低级函数混合起来。而JDBCAPI相对来说简单易学,因此JDBC-ODBC桥使程序员可以依赖JDBCAPI。JDBC-ODBC桥允许程序通过标准化JDBC接口处理ODBC。在提出更好的解决方案时,这就可以使程序避免束缚到ODBC上。
尽管JDBC-ODBC桥应被看成是过渡性解决方案,不过,在数据库没有提供JDBC驱动,只有ODBC驱动的情况下,也只能采用JDBC-ODBC桥的方式访问数据库。例如,对微软的Access数据库操作时,就只能用JDBC-ODBC桥来访问了。
Type3:网络纯Java驱动程序
这种驱动程序将JDBC转换为与DBMS无关的网络协议,之后这种协议又被某个服务器转换为一种DBMS协议,如图6-4所示。
#p#分页标题#e#
这种网络服务器中间件能够将它的纯Java客户机连接到多种不同的数据库上。所用的具体协议取决于提供者。通常,这是最为灵活的JDBC驱动程序,能提供适合于Intranet用的产品。为了使这些产品也支持Internet访问,它们必须处理Web所提出的安全性、通过防火墙的访问等方面的额外要求。
这种驱动实际上是根据我们熟悉的三层结构建立的。JDBC先把对数局库的访问请求传递给网络上的中间件服务器。中间件服务器再把请求翻译为符合数据库规范的调用,再把这种调用传给数据库服务器。Bea公司的WebLogic和IBM公司的Websphere应用服务器就包含了这种类型的驱动。由于这种驱动是基于Server的,所以,它不需要在客户端加载数据库厂商提供的代码库,而且它在执行效率和可升级性方面是比较好的。因为大部分功能实现都在Server端,所以这种驱动可以设计得很小,可以非常快速地加载到内存中。但是,这种驱动在中间件层仍然需要配置其他数据库驱动程序,并且由于多了一个中间层传递数据,从某种意义上说,它的执行效率不是最好的。
图6-3本地APIJava驱动程序
图6-4JDBC网络纯Java驱动程序
Type4:本地协议纯Java驱动程序
这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的网络协议。这种驱动与数据库建立直接的套接字连接,采用具体数据库厂商的网络协议把JDBCAPI调用转换为直接网络调用,也就是允许从客户机机器上直接调用DBMS服务器,是Intranet访问的一个很实用的解决方法。由于Type4驱动写的应用可以直接和数据库服务器通信。这种类型的驱动完全由Java实现,因此实现了平台独立性,如图6-5所示。
图6-5本地协议纯Java
驱动程序
建议尽可能地使用纯JavaJDBC驱动程序代替桥和ODBC驱动程序,这可以完全省去ODBC所需的客户机配置,也免除了Java虚拟机被桥引入的本地代码(即桥本地库、ODBC驱动程序管理器库、ODBC驱动程序库和数据库客户机库)中的错误所破坏的可能性。