Java程序设计实践教程ch.pptx_第1页
Java程序设计实践教程ch.pptx_第2页
Java程序设计实践教程ch.pptx_第3页
Java程序设计实践教程ch.pptx_第4页
Java程序设计实践教程ch.pptx_第5页
已阅读5页,还剩30页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

,第11章 访问数据库,内容摘要,在当今网络技术蓬勃发展的时代,数据库扮演着非常重要的角色;因此,数据库操作是程序应用的最重要技术之一。如何获取数据、增加数据、删除数据,以及如何对数据库进行管理,是每个程序开发者必须面对的问题。为了使程序开发人员不必考虑所用的数据库更可编写应用程序,Java平台提供一个标准的数据库访问接口集JDBC API。 本章将要介绍JDBC基本概念和接口,并且介绍访问数据库的不同方式,以及如何使用JDBC接口操作数据库等。,学习目标,掌握JDBC概念 熟练掌握JDBC常用API 熟练掌握连接数据库 熟练掌握更新数据库 掌握使用JDBC调用存储过程 掌握JDBC预编译语句 掌握使用JDBC元数据 掌握在Swing中执行数据库操作,11.1 JDBC基础,在Java程序中,对数据库的操作都通过JDBC组件完成。JDBC在Java程序和数据库之间充当一个桥梁的作用。Java程序可以通过JDBC向数据库发出命令,数据库管理系统获得命令后,执行请求,并将请求结果通过JDBC返回给Java程序。JDBC分为JDBC驱动程序和JDBC API。JDBC驱动程序是一个翻译器,可以把底层的DBMS私有信息转换成JDBC API能理解的底层消息,反之亦然。在本节将会详细介绍JDBC的概念、组成以及应用等。,11.1.1 JDBC概述,JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够使用纯Java语言编写完整的数据库应用程序。 JDBC是Sun提供的一套数据库编程接口API函数,由Java语言编写的类、界面组成。用JDBC写的程序能够自动地将SQL语句传送给相应的数据库管理系统。不但如此,使用Java编写的应用程序还可以在任何支持Java的平台上运行,不必在不同的平台上编写不同的应用。Java和JDBC的结合可以让开发人员在开发数据库应用程序时真正实现“Write Once,Run Everywhere!”,11.1.1 JDBC概述,有了JDBC,向各种关系数据库发送SQL语句就是一件很容易的事。只要数据库厂商支持JDBC,并为数据库预留JDBC接口驱动程序。那么就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,为访问Informix数据库又写另一个程序等。只需用JDBC API写一个程序就够了,它可向预留的JDBC驱动程序发送数据,经过JDBC驱动程序翻译,然后发送SQL语句给数据库。而且,使用Java编程语言编写的应用程序,就无须去忧虑要为不同的平台编写不同的应用程序。将Java和JDBC结合起来将使程序员只须写一遍程序就可让它在任何平台上运行。,11.1.1 JDBC概述,图11-1 应用程序、JDBC和驱动程序之间的关系,11.1.2 JDBC API介绍,JDBC API包含在两个包里。第一个包是java.sql,它包含了JDBC API的核心Java数据对象,这包括为DBMS(数据库管理系统)连接和存储在DBMS里的数据进行交互而提供的Java数据对象。另外一个包含JDBC API的包是javax.sql,它扩展了java.sql,是J2EE/Java EE的一部分。除其他高级JDBC特性外,javax.sql还包含了那些与Java命名与目录接口(JNDI)进行交互的Java数据对象,以及管理连接池的Java数据对象。,11.1.2 JDBC API介绍,图11-2 JDBC API结构图,11.1.2 JDBC API介绍,DriverManager DriverManager类是JDBC的管理层,作用于用户和驱动程序之间。它跟踪可用的驱动程序,并在数据库和相应驱动程序之间建立连接。另外,DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等事务。 Connection Connection对象代表与数据库的连接。连接过程包括所执行的SQL语句和在该连接上所返回的结果。一个应用程序可与单个数据库有一个或多个连接,或者可与许多数据库有连接。,11.1.2 JDBC API介绍,Statement Statement对象用于将SQL语句发送到数据库中。实际上有三种Statement对象,它们都作为在给定连接上执行SQL语句的包容器:Statement、PreparedStatement(它从Statement继承而来)和CallableStatement(它从PreparedStatement 继承而来)。它们都专用于发送特定类型的SQL语句:Statement对象用于执行不带参数的简单SQL语句;PreparedStatement对象用于执行带或不带IN参数的预编译SQL语句;CallableStatement对象用于执行对数据库已存储过程的调用。Statement接口提供了执行语句和获取结果的基本方法。PreparedStatement接口添加了处理IN参数的方法;而CallableStatement添加了处理OUT参数的方法。,11.1.2 JDBC API介绍,ResultSet 使用Statement对象执行executeQuery()方法,将会返回一个数据库的结果集。结果集一般是一个表,其中有查询所返回的列标题及相应的值。ResultSet记录集中了包含符合SQL语句中条件的所有行,并且它通过一套get方法(这些get方法可以访问当前行中的不同列)提供了对这些行中数据的访问。ResultSet使用next方法用于移动到ResultSet中的下一行,使下一行成为当前行。,11.1.3 JDBC连接数据库方式,在java.sql包中,只包括少量具体类。API中的大部分被描述为数据库的中枢接口类,它们指定具体操作而不提供任何实现。实际的实现由第三方提供商提供。独立的数据库系统通过一个实现java.sql.Driver接口的特定JDBC驱动程序被接收。驱动程序支持几乎所有流行的RDBMS(关系数据库管理)系统,但不是都可免费获得的。Sun公司将一个免费的JDBC-ODBC桥驱动程序绑定在JDK上以支持标准ODBC数据源。 JDBC驱动程序可用于大多数数据平台,它们来自许多提供商并且区别很大。下面介绍四种不同类型的驱动程序。,11.1.3 JDBC连接数据库方式,JDBC-ODBC桥 图11-3 通过JDBC-ODBC桥访问数据库,11.1.3 JDBC连接数据库方式,通过JDBC-ODBC桥访问数据库 图11-4 通过本地协议的纯Java驱动程序访问数据库,11.1.3 JDBC连接数据库方式,部分本地API Java驱动程序 图11-5 部分本地API Java驱动程序,11.1.3 JDBC连接数据库方式,JDBC网络纯Java驱动程序 图11-6 利用作为中间件的应用服务器访问数据库,11.2 数据库常见操作,在Java程序开发中,大部分程序都离不开后台数据库的支持。对于初学者来说,在Java中操作数据库是程序开发的重点和难点。前面介绍了JDBC的基本概念和相关的接口。下面将介绍在Java程序通过JDBC访问数据库,并且介绍在数据库中执行不同的操作的方法。,11.2.1 连接数据库,无论采用上一节介绍的哪种方式连接数据库,如jdbc-odbc桥连接或纯Java驱动程序连接,其连接步骤和使用到的JDBC API都是相同的。,11.2.1 连接数据库,连接前准备 连接数据库 Java程序通过JDBC组件连接一个数据库,可以分为加载JDBC驱动程序、提供JDBC URL和获取Connection对象几个步骤。 连接实例 在了解了Java程序中连接数据库的基本步骤后,就可以动手编写一个Java程序,实现对MySQL数据库的连接。,11.2.2 显示数据库数据,在上一个小节中,我们利用DriverManager和Connection接口,可以成功的连接到后台数据库。当数据库连接成功后,就可以显示数据库中的数据。,11.2.3 更新数据库数据,在Java程序中,由于外部环境的变化,后台连接数据库中的数据每隔一段时间,就需要更新。我们不可能直接打开MySQL数据库进行更新,一般情况下都是借助Java程序进行更新。更新数据库中的数据,可以使用SQL语句的UPDATE、INSERT和DELETE操作,然后将包含UPDATE、INSERT、DELETE的SQL语句交给Statement对象的executeUpdate()方法执行。Statement对象用于执行不带参数的简单SQL语句。,11.2.4 查询数据库数据,条件的显示数据库数据,是程序员必须要掌握的技能之一。在Java程序中,显示符合条件的数据记录非常简单,只需要修改其执行的sql语句就可以。,11.3 JDBC高级操作,除了上面介绍的基本操作外,如数据显示、添加、删除和修改外,还可以使用JDBC对数据库执行高级操作,如成批添加数据和调用存储过程等。,11.3.1 使用PreparedStatement接口执行SQL语句,PreparedStatement接口创建表示预编译的SQL语句对象。SQL语句经过预编译,并存储在PreparedStatement对象中。然后,此对象可用来有效地多次执行此语句。PreparedStatement接口继承Statement类,并与之在两方面有所不同: PreparedStatement实例包含已编译的SQL语句。由于PreparedStatement对象已预编译过,所以其执行速度要快于Statement对象。因此,多次执行的SQL语句经常创建为PreparedStatement对象,以提高效率。 包含于PreparedStatement对象中的SQL语句可具有一个或多个IN参参。IN参数的值在SQL语句创建时未被指定。相反的,该语句为每个IN参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的SetXXX方法来提供。,11.3.1 使用PreparedStatement接口执行SQL语句,作为Statement的子类,PreparedStatement继承了Statement的所有功能。另外它还添加了一整套方法,用于设置发送给数据库以取代IN参数占位符的值。同时,三种方法execute、executeQuery和executeUpdate已被更改又以使其不再需要参数。这些方法的Statement形式(接受SQL语句参数的形式)不应该用于PreparedStatement对象。,11.3.2 使用CallableStatement接口执行SQL语句,存储过程可以使得对数据库的管理、显示关于数据库及其用户信息的工作容易得多。存储过程是SQL语句和可选控制流语句的预编译集合,以一个名称存储并作为一个单元处理。存储过程存储在数据库内,可由应用程序通过一个调用执行,而且允许用户声明变量、有条件执行以及其他强大的编程功能。 存储过程可包含程序流、逻辑以及对数据库的查询。它们可以接受参数、输出参数、返回单个或多个结果集以及返回值。存储过程的功能取决于数据库所提供的功能。,11.3.2 使用CallableStatement接口执行SQL语句,在JDBC组件中,CallableStatement接口对象为所有的DBMS提供了一种以标准形式调用存储过程的方法。存储过程存在数据库中。对存储过程的调用是CallableStatement对象所含的内容。这种调用操作有两种形式: 带结果参数的形式 不带结果参数的形式 在JDBC中调用存储过程的语法如下所示: call 过程名(?,?,?,) 返回结果参数的过程的语法为: ?=call 过程名(?,?,?,) 不带参数的已存储的过程语法为: call 过程名,11.3.2 使用CallableStatement接口执行SQL语句,这里需要注意的是,上述语句法中,方括号表示其间的内容是可选项;方括号本身并不是语法的组成部分。 CallableStatement继承Statement的方法(它们用于处理一般的SQL语句),还继承PreparedStatement的方法(它们用于处理IN参数)。CallableStatement中定义的所有方法都用于处理OUT参数或INOUT参数的输出部分,注册OUT参数的JDBC类型(一般SQL类型),从这些参数中检索结果,或者检查所返回的值是否为JDBC NULL。,11.4 JDBC元数据,元数据是对数据资源的描述,英文名称是“Metadata”,通常被解释为data about data,即关于数据的数据。元数据是信息共享和交换的基础和前提,用于描述数据集的内容、质量、表示方式、空间参考、管理方式以及数据集的其他特征。 JDBC提供了三个元数据接口:DatabaseMetaData、ResultSetMetaData和ParameterMetaData。其中DatabaseMetaData提供了数据库以及DBMS的相关信息,Resul

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论