第10章应用JDBC进行数据库开发本章学习目标:了解JDBC的用途、体系结构和驱动器类型。了解JDBC连接数据库的方法。掌握JDBC访问数据的过程。掌握Statement接口及相关常用方法。掌握PreparedStatement接口及相关常用方法。了解CallableStatement接口。掌握ResultSet处理结果集。了解使用JDBC连接其他数据库。掌握连接池的原理及如何配置。熟悉从数据库中存取各种二进制文件。熟悉分页技术。3前言需要开放的数据库连接,就是人们需要用一种新的方法来访问不同的数据库。为此,在系统中必须广泛使用中间件技术,以隐藏各种复杂性,屏蔽各种系统之间的差异。ODBC(OpenDataBaseConnectivity)技术和JDBC(JavaDataBaseConnectivity)技术就是这种优秀的中间件技术。4前言-数据库访问技术简介客户机/服务器应用程序数据库编程ODBCJDBC两个常用的API数据库执行SQL语句检索查询结果5数据库ODBC客户机/服务器GUI应用程序ODBC(开放式数据库连接)(Microsoft提供)插入删除修改应用程序编程接口查询6JDBCJDBC(Java数据库连接)(sun公司提供)Java应用程序编程接口Java应用程序数据库插入修改删除查询10.1JDBC概述JDBC是一种可用于执行SQL语句的JavaAPI(ApplicationProgrammingInterface应用程序设计接口)。它由一些Java语言编写的类和页面组成。JDBC为数据库应用开发人员、数据库前台工具开发人员提供了一种标准的应用程序设计接口,使开发人员可以用纯Java语言编写完整的数据库应用程序。10.1.1JDBC的用途JDBC主要有3种作用,分别是:与数据库连接发送SQL语句处理语句执行结果。同时,JDBC是一种低级的API接口,它直接调用SQL语句,功能简单,在它的基础上可以建立起一些高级的API接口,高级API接口往往使用更为方便且便于理解。通过JDBC,可以很方便地向各种关系数据发送SQL语句并获得执行结果。10.1.2JDBC的典型用法JDBC支持两层模型,也支持三层模型访问数据库。10JDBC数据库设计方法(1)Java应用程序或者AppletJDBC客户机DBMSDB服务器DBMS专用协议JDBC两层应用模型11在两层模型中,JavaApplet或JavaApplication将直接与数据库进行对话。其中需要一个JDBCDriver来与所访问的特定数据库管理系统进行通信。用户的SQL语句被送往数据库中,返回其结果给用户。数据库可以存放在本地机或者是网络服务器上,Java应用程序也可以通过网络访问远程数据库,如果数据库存放于网络计算机上,则是典型的客户/服务器模型应用。应用程序虽然可以是Java的Application或Applet,但是这种模型限制较多,比较适合Application,而不太适合Applet。12JDBC数据库设计方法(2)Web服务器JDBC应用服务器DBMSDB服务器DBMS专用协议Java小应用程序(applet)客户机HTTPRMI调用JDBC三层应用模型13在三层模型中,客户通过浏览器调用Java小应用程序,小应用程序通过JDBCAPI提出SQL请求,请求先是被发送到服务的中间层,也就是调用小应用程序的Web服务器,在服务器端通过JDBC与特定数据库服务器上的数据库进行连接,由数据服务器处理该SQL语句,并将结果送回到中间层,中间层再将结果送回给用户,用户在浏览器中阅读最终结果。中间层为业务逻辑层,可利用它对公司数据进行访问控制。中间层的另一个好处是,用户可以利用易于使用的高级API,而中间层将把它转换为相应的低级调用。最后,许多情况下,三层结构可使性能得到优化,并提高安全保证。14JDBC数据库设计方法(3)Web服务器JDBC应用服务器DBMSDB服务器DBMS专用协议Java小应用程序(applet)客户机HTTPRMI调用JDBC四层应用模型O/R映射中间层在两层模型中,一个JavaApplet或者一个Java应用直接同数据库连接。这就需要与数据库进行连接的JDBC驱动器。用户的SQL语句被传送给数据库,这些语句执行的结果将被返回给用户。Client端Server端(DBMS)ODBC/JDBC数据库专用协议在三层模型中,命令将被发送到服务的“中间层”,而“中间层”将SQL语句发送到数据库。在服务器端通过JDBC与特定数据库服务器上的数据库进行连接,由数据服务器处理该SQL语句,并将结果送回到中间层,中间层再将结果送回给用户,用户在浏览器中阅读最终结果。客户端数据库服务器中间服务器HTTP、RMI、CORBAJDBC10.1.3JDBC体系结构JDBCAPI:屏蔽不同的数据库驱动程序之间的差别,使得程序设计人员有一个标准的、纯Java的数据库程序设计接口,为在Java中访问任意类型的数据库提供技术支持,驱动程序管理器:为应用程序加载数据库驱动程序。数据库驱动程序:与具体的数据库相关,用于向数据库提交SQL请求。应用程序应用程序应用程序数据库数据库数据库JDBCAPIJDBCDriverManager数据库驱动18JDBC驱动器JDBC是JavaWeb应用程序开发中主要的API之一,负责对数据库的访问。在对数据库进行访问时java应用程序首先调用JDBCAPI,然后把访问语句提交给JDBC驱动器从而实现访问数据库的操作.JDBC主要包括了2个包:java.sql主要针对基本的数据库编程服务如连接,执行语句.javax.sql主要为数据库的高级操作提供接口和类,引入了容器管理的连接池和分布式事物等.JDBC软件包本身不能连接数据库,它只是一个API框架,需要通过数据库驱动程序或其他软件包提供方法.19使用JDBC,由厂商操作实现操作数据库接口的驱动程序,而Java程序设计人员调用JDBC的API并操作SQL,实际对数据库的操作由JDBC驱动程序负责。如果要更换数据库,基本上只要更换驱动程序,Java程序中只要加载新的驱动程序来源,即可完成数据库系统的变更,Java程序的部分则无需改变。20JDBC的目的,是让Java程序设计人员在编写数据库操作程序的时候,可以有个统一的操作接口,无需依赖于特定的数据库API,希望达到“写一个Java程序,适用所有的数据库”的目的。21JDBCJava应用1OracleMySQLSQLServerJava应用nJDBC驱动程序类型1.JDBC-ODBC桥驱动程序2.部分本地APIJava驱动程序3.JDBC纯网络Java驱动程序4.本地协议的纯Java驱动程序23RDBMSJDBC体系结构JDBCAPIJDBC-ODBC桥(Type1)JDBC-Native(Type2)JDBC-NET(Type3)纯JavaJDBC驱动(Type4)ODBC驱动NativeAPI(C/C++)NetServer(JNDI)24TYPE1JDBC-ODBCBridgeTYPE1驱动程序:是JDBC-ODBC桥连接方式通常运行在Windows系统上需要在客户机上安装ODBC驱动程序25TYPE2Native-APIBridgeTYPE2驱动程序:部分本地APIJava驱动程序:将标准的JDBC调用转换为对数据库API的本地调用,这类驱动程序要求客户端计算机安装相应的二进制代码。NativeAPI驱动程序利用客户机上的本地代码库与数据库进行直接通信。26TYPE3JDBC网络纯java驱动器27TYPE3JDBC纯网络Java驱动程序:能将JDBC的调用转换为独立于数据库的网络协议。这种类型的驱动程序特别适合于具有中间件的分布式应用。DBMS28TYPE4PureJavaDriverTYPE4是一种纯Java的驱动实现,他不需要任何客户端配置。本地协议的纯Java驱动程序能将JDBC调用转换为数据库直接使用的网络协议,是100%的Java程序,使用JavaSockets来连接数据库,所以特别适合于通过网络使用后台数据库的Applet。29安装驱动器、使用驱动器把mysql-connector-java-5.0.4.zip解压缩,把其中的mysql-connector-java-5.0.4-bin.jar文件拷到相应的目录下1、对应用程序来说,拷贝到jre目录下的lib目录下的ext目录下(C:\ProgramFiles\Java\jre1.5.0_04\lib\ext),这是java的“系统扩展库”目录,其下文件会被java运行环境自动加载,可消除找不到jdbc驱动程序的现象。如果还找不到可采用如下面两个图所示添加外部JRE把JDBC添加进来2、对于WEB应用来说,拷贝到C:\ProgramFiles\ApacheSoftwareFoundation\Tomcat5.5\common\lib路径下此文件就是JDBC驱动3031对于项目,查看它的JRE系统库10.3使用JDBC操作数据库JDBC的接口分为两个层次:一个是面向程序开发人员的JDBCAPI,另外一个是底层的JDBCDriverAPI。JavaApplicationJDBCManagerJDBC-NetDriverJDBC-ODBCBridgeDriverODBCandDBDriversDriverADriverBPublishedProtocolProprietaryDatabaseAccessProtocolsJDBCAPIJDBCDriverAPIJDBCImplementationAlternatives...JDBCAPI接口说明接口功能java.sql.DriverManager处理驱动程序的调用并对后续数据库连接提供支持java.sql.Connection处理特定的数据库连接java.sql.Statement代表一个特定的SQL执行语句java.sql.PreparedStatement代表一个预编译的SQL执行语句java.sql.CallableStatement代表一个内嵌过程的SQL调用语句java.sql.ResultSet控制一个特定的SQL语句的执行结果10.3.1使用JDBC访问数据库的过程JDBC访问数据库可以分为连接数据库和操作数据库两个步骤。驱动管理器结果集SQL语句连接加载JDBC驱动程序得到查询结果发送SQL查询建立与数据库的连接JDBC程序访问数据库的步骤2-1开始导入java.sql包加载并注册驱动程序创建一个Connection对象创建一个Statement对象执行语句关闭ResultSet对象关闭Statement对象关闭连接结束使用ResultSet对象查询添加删除修改1.JDBC连接数据库JDBC连接数据库分为加载驱动程序和建立连接两个步骤。DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。DriverManager类包含一列Driver类,因此在调用DriverManager方法之前,需要加载并注册所用的驱动器类,Class.forName,这将显式地加载驱动程序类。①加载驱动程序StringdriverName=com.mysql.jdbc.Driver;Class.forName(driverName);②建立连接DriverManager.getConnection()方法用于建立与某个数据源的连接,getConnection方法是DriverManager类中的静态方法使用DriverManger.getConnection(),建立一个新的数据库连接。方法:方法一:getConnection(StringURL);