[摘要]作为J2EE核心API之一的JDBC是客户端和数据库服务器端沟通的桥梁,它为访问不同的数据库提供了一种统一的途径。文章以软件项目开发中运用最多的Oracle和SQL Server为目标数据库,详细分析JDBC连接这两种数据库的不同方式,并对它们各自不同的连接方式进行深入比较。
[关键词]JDBC;数据库;驱动;Oracle;SQL Server
[作者简介]张海越,无锡科技职业学院讲师,硕士,研究方向:计算机软件开发与设计,江苏无锡,214028;范曦,无锡科技职业学院,江苏无锡,214028
[中图分类号] TP311 [文献标识码] A [文章编号] 1007-7723(2012)01-0049-0003
Browser/Server三层结构的开发模式已日渐成为商业软件开发的主流,而基于Java数据库体连接体系结构的JDBC可以为B/S模式中的浏览器端客户向数据库服务器端的数据访问提供安全和统一的途径。JDBC是由Java语言编写的类和接口构成的组建,它为软件和数据库的开发人员提供了一个标准的API,由此可以构建更高级别的接口和工具。JDBC使开发人员能够运用Java语言编写各种类型的数据库应用程序。目前大部分的商业应用软件采用Oracle或者SQL Server作为后台数据库。文章将对JDBC与Oracle和SQL Server数据库的连接方式作深入的剖析。
一、使用JDBC连接Oracle数据库
JDBC与Oracle的连接方式通常有两种:OCI方式和thin方式。
(一)OCI方式
OCI是一种“胖”客户端的连接方式,也就是说采用这种连接方式必须安装Oracle的客户端。OCI是Oracle公司提供的一种访问接口,它的作用是使用Java语言来调用本地的Oracle客户端,然后再访问数据库。OCI方式的连接和访问速度快,但是需要额外安装和配置数据库。OCI方式连接Oracle的步骤如下:
1.首先在本地计算机安装Oracle数据库的客户端。
2.在安装的客户端目录中找到classes12.zip文件,然后在本机的环境变量中设置classes12.zip所在的路径。
3.最后通过Java类库中的数据库连接类,在本地通过OCI方式获取Oracle数据库连接。
步骤3中的主要代码为:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:oci8:user/pass@orcl");
第一句语句为加载Oracle数据库驱动程序,第二句语句为通过OCI方式与数据库建立连接。在第二句语句中的字符串"jdbc:oracle:oci8:user/pass@orcl"中,user为Oracle用户的用户名,pass为用户密码,orcl为数据库的服务名。
(二)thin方式
thin方式相对于OCI方式而言是一种“瘦”客户端的连接方式,也就是说这种连接方式不需要再安装Oracle的客户端,而只需要在本机环境中设置JDBC驱动和添加必要的jar包。实质上thin的连接方式就是使用纯Java语言编写的Oracle数据库访问接口。thin方式连接Oracle的步骤如下:
1.首先去Oracle的官网下载相应版本的Oracle JDBC驱动。
2.然后在本机的环境变量classpath中设置下载的驱动文件所在的路径。
3.最后通过数据库连接类,在本地通过thin方式与Oracle数据库建立连接。
步骤3中的主要代码为:
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection ("jdbc:oracle:thin:@数据库服务器地址:端口号:服务名", "用户名", "密码");
第一句语句为加载数据库驱动程序,第二句语句为通过thin方式与Oracle连接。第二句语句中的连接字符串中需要提供相应的数据库服务器的IP地址、端口号(通常为1521)、数据库服务名、用户账号和用户密码。
(三)OCI方式和thin方式的比较
OCI方式和thin方式连接Oracle数据库的主要区别如下:
1.从使用层面上来看,OCI方式要求必须在本地安装Oracle的客户端后才能进行连接,而thin方式就不需要安装客户端。因此,thin方式在使用上更加方便,灵活性更高,适用性更强,这也是thin方式更为常用的主要原因。
2.从原理层面上来看,thin方式是通过纯java语言来实现基于TCP/IP协议的客户端和数据库服务器端的通讯;而OCI方式是客户端通过native java method调用OCI来访问数据库服务器端。因此,OCI连接方式需要Oracle的客户端安装作为前提。
3.从驱动本身层面上来看,它们分属不同的驱动类别,OCI为二类驱动,thin为四类驱动。
虽然两种连接方式在本质上有着巨大区别,但它们在功能上没有明显的差异。两者之间的切换在设置上来说非常简单。以从thin驱动切换到OCI驱动为例,只需把连接字符串"java:oracle:thin:@数据库服务器地址:端口号:数据库库服务名"转换为字符串"java:oracle:oci8@服务名"即可,如从"jdbc:oracle:thin:@192.168.21.1:1521:orcl"改为"jdbc:oracle:oci8:@orcl"。
二、使用JDBC连接SQL Server数据库
SQL Server是微软公司的数据库产品,被广泛应用于中小型商业软件的开发。JDBC连接SQL Server通常有三种方法:JDBC-ODBC连接桥、使用Microsoft提供的驱动方式和jtds方式。
(一)JDBC-ODBC连接桥
该方式需要在本地配置ODBC数据源。首先在本机的管理工具中添加ODBC数据源,然后调用数据库连接类,通过JDBC-ODBC桥和SQL Server建立连接。主要的连接代码为: Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:数据源名称","用户名","密码");
第一句语句为加载JdbcOdbc驱动,第二句语句为通过桥获取与数据库的连接。在第二句语句中需要提供正确的ODBC数据源名称、用户名和用户密码。
(二)使用Microsoft提供的驱动方式
该方式是采用由微软公司本身提供的驱动程序与SQL Server进行连接。首先需要下载相应的驱动程序文件,然后通过加载该驱动程序与数据库建立连接。值得注意的是该种方式连接SQL Server 2000和SQL Server 2005时的主要连接代码会有所不同:
1.连接SQL Server 2000
Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:microsoft:sqlserver://服务器地址:端口号;DatabaseName=数据库名称","用户名","密码");
2.连接Sql Server 2005
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
Connection con = DriverManager.getConnection("jdbc:sqlserver://服务器地址:端口号;DatabaseName=数据库名称","用户名","密码");
无论是连接SQL Server 2000还是SQL Server 2005都必须在连接字符串中提供数据库服务器地址、端口号(通常为1433)、数据库名称、数据库用户名和密码。
(三) jtds驱动方式
该方式是利用第三方提供的驱动程序和SQL Server进行连接。首先需要下载jtds的驱动文件,然后利用数据库连接类加载该驱动文件就可以通过jtds方式与SQL Server建立连接了。主要的连接代码如下:
Class.forName("net.sourceforge.jtds.jdbc.Driver");
Connection con = DriverManager.getConnection("jdbc:jtds:sqlserver://数据库地址:1433/数据库名;user=用户名;password=密码");
第一句语句为加载jtds驱动,第二句语句为通过jtds获取数据库连接。在第二句语句中同样需要为连接字符串提供正确的服务器地址、端口号、数据库名、数据库用户名和密码。
(四)三种连接方式的比较
前两种连接方式的主要区别在于:JDBC-ODBC连接桥方式需要配置ODBC数据源但不需要下载驱动程序;而使用Microsoft提供的驱动方式需要下载相应的驱动程序,对于XP的用户还需要安装相应的补丁程序。
jtds方式与前两种方式的区别主要在于:
1.功能更加全面。jtds完全支持JDBC 3.0,而Microsoft提供的驱动仅完全实现JDBC 2.0,JDBC-ODBC桥仅支持JDBC 1.0。
2.完全免费,开源代码。开发人员不仅能够使用jtds进行调试并微调形成自己喜好的方式,还可以将jtds应用和发布于各种免费的或者商业性的应用程序中。虽然JDBC-ODBC桥和Microsoft提供的驱动也是免费的,但是一旦遇到开发人员无法解决的问题就必须求助于Sun公司和微软公司。
3.稳定性更强。jtds比其他两种方式具有更好的稳定性,一旦ODBC驱动产生问题和错误,JDBC-ODBC桥会使Java虚拟机崩溃。而因为商业竞争,Microsoft提供的驱动也不可能真正完全地支持Java/JDBC。
三、结语
由于Java语言的普及和大量使用,通过JDBC连接数据库的方式会在各类软件项目中获得更为广泛的应用,它的重要性也将越来越突出。除了上述介绍的JDBC连接Oracle和SQL Server数据库的方式以外,JDBC还可以通过数据库连接池和hibernate等技术与不同的数据库建立连接。总之,随着计算机技术水平的不断进步,通过JDBC连接各种不同数据库将会变得更加灵活、稳定和高效。
[参考文献]
[1]许晓茹.浅议三层网络体系结构的特点[J].沿海企业与科技,2005,(5).
[2]刘志成.JSP程序设计案例教程[M].北京:清华大学出版社,2007.
[3]赵景晖,迟勇.Java语言程序设计[M].大连:大连理工出版社,2009.