您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 公司方案 > 第8章 JDBC技术
1第八章JDBC技术往往实际的项目中都需要用到主流的关系型数据库,因此掌握JDBC技术是非常重要的。本章主要介绍JDBC技术的基本原理,重点介绍JDBC技术体系中的常用接口和类,并通过实例来说明用JDBC操作数据库的过程。本章的基础前提就是读者已经学过关于数据库方面的知识,并且熟悉常用的SQL语句。8.1JDBC原理概述8.1.1JDBC基本概念JDBC,全称为JavaDataBaseConnectivity(Java数据库连接)。它由一组用Java语言编写的类和接口组成,是Java开发人员和数据库厂商达成的协议,也就是由Sun公司定义的一组接口,由数据库厂商来实现,并规定了Java开发人员访问数据库所使用的方法的规范。通过它可访问各类关系数据库。JDBC也是Java核心类库的组成部分。JDBC的最大特点是它独立于具体的关系数据库。与ODBC(OpenDatabaseConnectivity)类似,JDBCAPI中定义了一些Java类和接口,分别用来实现与数据库的连接(connections)、发送SQL语句(SQLstatements)、获取结果集(resultsets)以及其它的数据库对象,使得Java程序能方便地与数据库交互并处理所得的结果。JDBC的API在java.sql、javax.sql等包中。Java程序应用JDBC,一般由以下步骤。注册加载一个数据库驱动程序。创建数据库连接(Connection)。创建一个Statement(发送sql)。数据库执行sql语句。用户程序处理执行sql语句的结果(包括结果集ResultSet)。关闭连接(Connection)等资源。由于数据库不同,驱动程序的形式和内容也不相同,主要体现在获得连接的方式和相关参数的不同。为了说明问题,本章采用的数据库为SQLServer2005,测试数据库名为jdbc_demo,库中只有一张表person,如下图所示。图8-1person表示意图2其中id为自增长主键,name(String)、age(int)和sex(String)为字段。8.1.2JDBC驱动程序及安装JDBC驱动程序是用于特定数据库的一套实现了JDBC接口的类集。要通过JDBC来存取某一特定的数据库,必须有相应的该数据库的JDBC驱动程序,它往往是由生产数据库的厂家提供,是连接JDBCAPI与具体数据库之间的桥梁。目前,主流的数据库系统如Oracle、SQLServer、Sybase、Informix等都为客户提供了相应的驱动程序。由于历史和厂商的原因,从驱动程序工作原理分析,通常有四种类型。分别是:JDBC-ODBC桥、部分Java、部分本机驱动程序、中间数据访问服务器和纯Java驱动程序。分别说明如下。1、JDBC-ODBC桥,全称是“JDBC-ODBCbridgedriver”。由于历史原因,ODBC技术比JDBC更早或更成熟,所以通过该种方式访问一个ODBC数据库,是一个不错的选择。这种方法主要原理是:提供了一种把JDBC调用映射为ODBC调用的方法。因此,需要在客户机安装一个ODBC驱动。这种方式由于需要中间的转换过程导致执行效率低,目前比较少用。实际上微软的数据库系统(如SQLServer和Access)仍然保留了该种技术的支持。2、第二种类型的全称是“native-API,partlyJavadriver”。这一类型的驱动程序是直接将JDBC调用转换为特定的数据库调用,而不经过ODBC了,执行效率比第一种高。但该种方法也存在转换的问题,且这类驱动程序与第一种驱动程序类型一样,也要求客户端的机器安装相应的二进制代码(驱动程序和厂商专有的API)。所以这类驱动程序应用存在限制,如不太适合用于Applet等。3、第三种类型的全称是“JDBC-NetpureJavadriver”。它的原理是将JDBC的调用转换为独立于数据库的网络协议,并完全通过Java驱动。这种类型的驱动程序不需要客户端的安装和管理,所以特别适合于具有中间件(middletier)的分布式应用,但目前这类驱动程序的产品不多。4、第四种类型又称为“nativeprotocol,pureJavadriver”。它能将JDBC调用转换为特定数据库直接使用的网络协议,不需要安装客户端软件,是百分之百的Java程序。这种方式的本质是使用Javasockets来连接数据库,所以它特别适合于通过网络使用后台数据库的Applet及Web应用,后面介绍的JDBC应用主要使用该类型的驱动程序。目前,大部分数据库厂商提供了该类驱动程序的支持。用户开发JDBC应用系统,首先需要安装数据库的驱动程序。以MicrosoftSQLServer2005为例,第一步是下载它的JDBC驱动jar包(如sqljdbc.jar),可以去微软官方下载。第二步,对于普通的JavaApplication应用程序,只需要将JDBC驱动包复制到CLASSPATH所指向的目录下就可以了,这和普通的Java类没什么区别。而对于Web应用,通常将JDBC驱动包放置在WEB-INF/lib目录下即可。对于其它数据库,可采用类似方法。8.1.3一个简单JDBC例子以下为一个最简单的JDBC应用代码。JdbcExample.javaimportjava.sql.*;//导入包publicclassJdbcExample{3publicstaticvoidmain(Stringarg[]){Stringdriver=null;//驱动程序名称//指定连接的数据库urlStringurl=jdbc:sqlserver://localhost:1433;databasename=jdbc_demo;try{//加载驱动程序,此处为第四种类型驱动程序;driver=com.microsoft.sqlserver.jdbc.SQLServerDriverClass.forName(driver);//通过驱动程序管理器建立与数据库的连接Connectioncon=DriverManager.getConnection(url);//创建执行查询的Statement对象Statementstmt=con.createStatement();//SQL语句,用于查询学生表中的姓名、年龄、和姓别Stringsql=SELECTname,age,sexFROMperson;//执行查询,查询结果放在ResultSet的对象中ResultSetrs=stmt.executeQuery(sql);Stringname,sex;intage;//打印出查询结果。while(rs.next()){//获得每一行中每一列的数据name=rs.getString(1);age=rs.getInt(2);sex=rs.getString(3);System.out.println(name+,+age+,+sex);}}//找不到驱动程序,捕捉异常。如发生该错误,//请检查JDK版本是不是在1.1以上catch(ClassNotFoundExceptione){System.out.println(错误:+e);}catch(SQLExceptione){System.out.println(错误:+e);}finally{try{rs.close();stmt.close();con.close();}catch(SQLExceptione}{}}}4上面代码,清晰地表达了应用JDBC技术的基本步骤。需要说明的是:所有与JDBC相关的操作代码必须用try{}处理。一方面,JDBC中绝大多数方法都被定义为抛出SQLExecption异常,该类异常属于必须捕捉的异常,否则,编译通不过。另一方面,如果在一处发生异常,应用程序就没有必要进行下去了。如连接数据库失败,就没必要产生Statement的实例了。JDBC应用中,一次数据库会话结束,必须关闭数据库连接资源,该资源是宝贵的,会话期间,由用户程序独占,结束后,必须释放。结果集(ResultSet)对象是一种数据容器,存放着满足SQL查询条件的数据库记录。通过next()方法,可以遍历所有记录,通过getXxx()可以得到指定行中的列值。关于结果集的全面介绍在下面章节中进行。8.2JDBC常用接口、类介绍JDBC中,定义了许多接口和类,但经常使用的不是很多。以下介绍的是最常用的接口和类,使初学者能够尽快掌握JDBC技术。8.2.1Driver接口Driver接口在java.sql包中定义,每种数据库的驱动程序都提供一个实现该接口的类,简称Driver类,应用程序必须首先加载它。加载的目的就是创建自己的实例并向java.sql.DriverManager类注册该实例,以便驱动程序管理类(DriverManager)对数据库驱动程序的管理。通常情况下,通过java.lang.Class类的静态方法forName(StringclassName),加载欲连接的数据库驱动程序类,该方法的入口参数为欲加载的数据库驱动程序完整类名。对于每种驱动程序,其完整类名的定义也不一样,以下做简单说明。如果使用第一种类型驱动程序(JDBC-ODBC),则其加载方法:Class.forName(sun.jdbc.odbc.jdbcOdbcDriver)。如果使用第四种类型驱动程序,则其加载方法:Class.forName(com.microsoft.sqlserver.jdbc.SQLServerDriver),这是SQLServer2005的驱动程序加载方法,且如果版本不一样,驱动程序名也会不同。同样,其它数据库(如MySQL、Oracle)的驱动程序加载方法也类同,这里不再说明。若加载成功,系统会将驱动程序注册到DriverManager类中。如果加载失败,将抛出ClassNotFoundException异常。以下是加载驱动程序的代码。try{Class.forName(driverName);//加载JDBC驱动器}catch(ClassNotFoundExceptionex){ex.printStackTrace();}需要注意的是,加载驱动程序行为属于单例模式,也就是说,整个数据库应用中,只加载一次就可以了。58.2.1DriverManager类数据库驱动程序加载成功后,接下来就由DriverManager类来处理了,所以是该类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间、登录管理和消息跟踪等事务。DriverManager类的主要作用是管理用户程序与特定数据库(驱动程序)的连接。一般情况下,DriverManager类可以管理多个数据库驱动程序。当然,对于中小规模应用项目,可能只用到一种数据库。JDBC允许用户通过调用DriverManager的getDriver、getDrivers和registerDriver等方法,实现对驱动程序的管理,进一步,通过这些方法实现对数据库连接的管理。但多数情况下,不建议采用上述方法,如果没有特殊要求,对于一般应用项目,建议让DriverManager类自动管理。DriverManager类是用静态方法getConnection来获得用户与特定数据库连接。在建立连接过程中,DriverManager将检查注册表中的每个驱动程序,查看它是否可以建立连接,有时,可能有多个JDBC驱动程序可以和给定数据库建立连接。例如,与给定远程数据库连接时,可以使用JDBC-ODBC桥驱动程序、JDBC到通用网络协议驱动程序或数据库厂商提供的驱动程序。在这种情况下,加载驱动程序的顺序至关重要,因为DriverManager将使用它找到的第一个可以成功连接到给定的数据库驱动程序进行连接。用DriverManager建立连接,主要由以下几种方法。staticConnectiongetC
本文标题:第8章 JDBC技术
链接地址:https://www.777doc.com/doc-4892951 .html