数据库访问的编程技术.ppt_第1页
数据库访问的编程技术.ppt_第2页
数据库访问的编程技术.ppt_第3页
数据库访问的编程技术.ppt_第4页
数据库访问的编程技术.ppt_第5页
已阅读5页,还剩66页未读 继续免费阅读

下载本文档

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

文档简介

第10章 数据库访问的编程技术 第10章数据库访问的编程技术 了解数据库编程的基本概念掌握JDBC的基本概念和工作原理掌握JDBC访问数据库的过程能用java进行简单的数据库编程 课程目标 目录 10 1JDBC概述10 2JDBC中的主要接口和类10 3JDBC访问数据库的基本过程10 4SQL查询语言的执行10 5综合应用举例 在开发企业级业务应用系统的过程中 需要使用数据库管理系统来存储 管理企业的业务数据 JDBC为在Java中开发数据库应用程序提供了良好的工具 掌握JDBC能够使得开发人员方便快捷地编写数据库应用程序 10 1JDBC概述 10 1JDBC概述 JDBC JavaDataBaseConnectivity Java数据库连接 是一种可用于执行SQL语句的JavaAPI 它为数据库应用开发人员 数据库前台工具开发人员提供了一种标准的应用程序设计接口 使开发人员可以方便地将各种SQL语句传送到任何关系数据库中 JDBC由一些Java语言编写的类和接口组成 用户使用这些类和接口就可以用统一的形式访问各种不同的关系数据库 并开发访问不同厂商数据库的应用程序 JDBC的基本结构如图所示 从图中可以看出 顶层是Java应用程序 它既可以是Applet应用程序 也可以是独立运行的Application应用程序 甚至还可以是服务器端运行的Severlet和EJB组件等 其他两层是JDBC接口 分别是面向程序员的JDBCAPI及面向数据库厂商的JDBCDriverAPI 10 1 1JDBC的基本结构 JDBC的基本结构 Java应用程序通过JDBCAPI接口 经由JDBC驱动程序管理器 JDBCDriverAPI和JDBC驱动程序访问下层的数据库 JDBCAPI屏蔽了不同的数据库驱动程序之间的差异 使得程序设计人员只能用一个标准的 纯Java的数据库程序设计接口 为在Java中访问任意类型的数据库提供支持 JDBC驱动程序程序管理器为应用程序装载数据库驱动程序 它与具体的数据库有关 用于向数据库提交SQL请求 数据库驱动程序一般是由生产数据库的厂家提供 不同的厂商为数据库提供不同的驱动程序 从而把访问操作数据库的复杂操作封装在自己的驱动程序中 例如 数据库厂商Oracle为Oracle10数据库提供了不同的驱动程序 但都实现了JDBC接口 对于应用程序开发人员而言 不必关心特定数据库的复杂操作 只需要掌握Java提供的访问数据库的接口 就可以编写访问不同类型的数据库的应用程序 10 1 2JDBC驱动程序 1 JDBC ODBC桥接器 Bridge 它负责将JDBC调用转换为ODBC调用 应用程序是通过JDBC调用连接到一个使用ODBC驱动程序的数据库 要求每个客户端都安装上数据库对应的ODBC和JDBC ODBCBridge两种驱动程序 2 本地API 部分Java驱动程序 NativeAPI partlyJavadriver 它是部分使用Java语言编写和部分使用本机代码编写的驱动程序 它将数据库厂商的特殊协议转换成Java代码及二进制类码 即把客户端的JDBC调用转换为Oracle Sybase DB2或其他DBMS的调用 使Java数据库客户端与数据库服务器端通信 10 1 2JDBC驱动程序 3 JDBC Net 纯Java驱动程序 它是纯Java的驱动程序 通过一定的网络协议与数据库服务器上的JDBC中间件通信 由中间件程序将网络协议指令转换成数据库指令 中间件可支持多种数据库 适合具有中间件的分布式应用 4 本地协议 纯Java驱动程序 可这类驱动程序通过实现一定的数据库协议 如Oracle公司的SQLNet 能将JDBC调用转换为数据库直接使用的网络协议 使Java数据库客户端直接与数据库服务器通信 它不需要安装客户端软件 它是100 的Java程序 所以其效率很高 目录 10 1JDBC概述10 2JDBC中的主要接口和类10 3JDBC访问数据库的基本过程10 4SQL查询语言的执行10 5综合应用举例 10 2JDBC中的主要类和接口 JDBC由一系列的类和接口组成 包括 连接 Connection 实现建立与数据库的连接SQL语句 Statement 向数据库发起查询请求结果集 ResultSet 处理数据库返回结果其中核心的类和接口包含在java sql包和javax sql包中 表中列出了java sql包中访问数据库的重要类和接口及它们的功能说明 访问数据库的重要类和接口 访问数据库的第一步是与数据源建立连接 只有建立了连接 才能在数据库和应用程序之间移动数据 DriverManager类是java sql包中用于数据库驱动程序管理的类 用于在数据库和相应驱动程序之间建立连接 也处理像驱动程序登录时间限制 登录和跟踪消息的显示等事务 10 2 1DriverManager类 DriverManager类的主要成员方法 DriverManager对象提供了三种建立数据库连接的方法 每种方法都返回一个Connection对象实例 区别是它们接收的参数不同 URL用于指定数据源和用于连接到该数据源的数据库的连接类型 其格式如下 jdbc 其中 jdbc 表示使用的协议是JDBC 驱动程序或者连接机制的名称 可以有一个或者多个驱动程序支持 数据库的唯一标识符例如 通过JDBC ODBC桥和数据库的标识符DBTest来访问数据库的URL为 jdbc odbc DBTest java sql Driver接口规定了所有JDBC驱动程序必须实现的方法 加载或注册一个数据库驱动程序 实际上就是创建了数据库驱动程序的一个实例 从而保证Java程序使用统一的形式 通过不同的数据库驱动器访问各种数据库 10 2 2Driver接口 java sql Connection是java sql包中定义的一个接口 其功能是建立与数据库的连接 只有成功地建立与数据库的连接 才能够创建用于执行SQL语句的Statement对象 进而获取数据库执行SQL语句后返回的结果 10 2 3Connection接口 Connection接口的主要成员方法 10 2 4Statement接口 Statement是在已经建立的连接的基础上向数据库发送SQL语句的对象 Statement接口定义了执行SQL语句和获取返回结果的成员方法 它们都作为在给定连接上执行SQL语句的容器 每个都专用于发送特定类型的SQL语句 由于Statement为一个接口 它本身不能被实例化 必须通过调用Connection对象的createStatement 方法创建一个Statement对象 Satatement接口的主要成员方法 Statement接口提供了3种执行SQL语句的方法 1 executeQuery 方法 执行返回单个ResultSet的SQL语句 如SELECT语句 2 executeUpdate 方法 用于执行INSERT UPDATE DELETE CREATETABLE以及DROPTABLE语句 返回值是一个整数 表示它执行的SQL语句所影响的数据库中的表的行数 3 execute 方法 用于执行返回多个结果集或多个更新计数的语句 它的执行结果可能会产生多个ResultSet 或者改变多条记录 所以一般只有在用户不知道执行SQL声明后会产生什么结果或可能有多种类型的结果产生时才会使用 10 2 5ResultSet接口 结果集ResultSet是用来暂时存放执行SQL语句后产生的结果集合 它的实例对象一般是Statement类的子类通过方法execute 或executeQuery 执行SQL语句后产生的 包含有这些语句的执行结果 ResultSet类似于数据库中的表 包含符合查询要求的所有行 ResultSet类提供了一套getXXX 方法对这些行中的数据进行访问 如 booleangetBoolean intcolumnIndex intgetInt intcolumnIndex 等 用于获取当前行中某一列的值 返回相应类型的值 它还提供了很多移动游标 cursor 的方法 cursor是ResultSet维护的指向当前数据行的指针 最初它位于第一行之前 因此第一次访问结果集时通常调用next 方法将游标置于第一行上 使它成为当前行 随后每次调用next 使游标向下移动一行 另外 还提供了isBeforeFirst isAfterLast isFirst isLast 等方法用于判断游标是否在结果集的头部 结果集的末尾 结果集的第一行和结果集的最后一行等 10 2 6PreparedStatement接口 当使用Statement对象执行SQL语句时 数据库中的SQL语句解释器首先将SQL语句进行编译 生成底层可理解的内部命令 然后执行 为了减少重复编译SQL语句所产生的开销 JDBC提供了PreparedStatement接口 由于PreparedStatement语句中包含了经过预编译的SQL语句 因此可以获得更高的执行效率 特别是当需要反复调用某些SQL语句时 使用该接口具有明显的优势 1 创建PreparedStatement对于JDBC 当使用Connection与某个数据库建立了连接对象con后 则con可以调用PreparedStatement 方法创建PreparedStatement对象 例如 stmt con prepareStatement SELECT FROMStudent 2 执行PreparedStatement创建了PreparedStatement对象后 就可以执行它了 调用表10 4所示的成员方法进行各种操作 如 stmt executeUpdate 在PreparedStatement语句中可以包含多个用通配符 代表的字段 在执行之前 必须为在创建PreparedStatement时定义的通配符提供实际的数据 可以利用setXXX 方法设置该字段的内容 从而增强程序设计的动态性 例如 如果要替换的值是一个int型 则可调用setInt 方法 基本上可以找到所有Java类型的setXXX 方法 setXXX 方法的第一个参数指定要替换的占位符的索引 索引从1开始 通配符在预处理SQL语句中从左到右依次出现的顺序分别称为第1个 第2个 第m个通配符 10 2 7CallableStatement接口 CallableStatement接口继承了PreparedStatement接口 用于执行对数据库存储过程的调用 它提供了gettXXX 方法获取某字段的内容 如果要获取的值是一个int型 则可调用getInt 方法 setXXX 方法的第一个参数指定要替换的占位符的索引 索引从1开始 通配符在预处理SQL语句中从左到右依次出现的顺序分别称为第1个 第2个 第m个通配符 1 创建CallableStatement对象CallableStatement对象是用Connection接口的prepareCall 方法创建的 例如 CallableStatementcstm con prepareCall callgetTestData 其中被调用的存储过程的名字为getTestData 该存储过程有两个变量 但不含结果参数 通配符为IN OUT或INOUT参数 取决于存储过程本身 在JDBC中调用存储过程的语法如下 call过程名 不带参数的存储过程的调用 call过程名 需要若干参数的存储过程的调用 call过程名 需要若干参数并返回结果参数的存储过程的调用 2 执行CallableStatement对象创建CallableStatement对象后 就可以调用其相关成员方法完成所需的操作 例如 try CallableStatementcstm con prepareCall callgetStudentID cstm setString 1 06070010 向存储过程传递参数cstm registerOutParameter 2 Type REAL 如需存储过程返回结果 需先调用registerOutParameter 方法设置输出参数类型cstm executeQuery floatx cstmt getFloat 1 用get方法获取执行结果 catch SQLExceptione 目录 10 1JDBC概述10 2JDBC中的主要接口和类10 3JDBC访问数据库的基本过程10 4SQL查询语言的执行10 5综合应用举例 10 3JDBC访问数据库的基本过程 利用JDBC访问数据库需要经历下面几个基本步骤 1 注册数据源 2 加载JDBC驱动程序 3 创建数据库连接 4 创建Statement 5 执行Statement 6 处理查询结果集 7 关闭数据库连接 一 注册ODBC数据源 在创建数据库连接之前 必须要先创建数据源 下面以WindowsXP为例说明注册ODBC数据源的过程 我们要把一个Oracle10i的数据库Student注册为一个ODBC数据源 命名成DBTest 注册步骤如下 1 在WindowsXP中选择 控制面板 性能和维护 管理工具 和 数据源 ODBC 弹出如图所示的 ODBC数据源管理器 对话框 2 单击其中的某个驱动程序 或者选择 用户DSN 选项卡 然后单击 添加 D 按钮 弹出如图所示的 创建新数据源 对话框 在这个对话框中 选择Oracle公司提供的驱动程序OracleOraDb10g home1 如果要创建其他数据库的数据源 例如MicrosoftSQLServer或MicrosoftAccess数据库的数据源 可以在 创建新数据源 对话框中选择SQLServer或MicrosoftAccess驱动程序 3 单击 完成 按钮 出现如图所示的 OracleODBCDriverConfiguration 对话框 在图示的对话框中的 DataSourceName 数据源名 输入框中输入数据源的名字 如 DBTest 该名字将被用来在Java程序中建立与数据库的连接 可以在 服务器 TNSServerName 输入框中输入相应的数据库服务器的名称或者IP地址 如 MyServer 然后单击 TestConnection 按钮 以测试连接是否可用 测试成功后 Java程序才能够通过JDBC访问该数据源 在访问数据库之前 必须将JDBC驱动程序加载到Java虚拟机中 加载驱动程序有两种基本方法 1 使用DriverManager类的静态方法registerDriver加载 2 使用java lang Class类的forName方法加载 二 加载JDBC驱动程序 使用DriverManager类加载OracleJDBC驱动程序的Java代码如下 DriverManager registerDriver neworacle jdbc driver OracleDriver 如果加载的驱动程序不存在 就会出现异常 此时需要应用程序对这种异常进行处理 1 加载OracleJDBC驱动程序 使用java lang Class类加载OracleJDBC驱动程序的Java代码如下所示 Classc Class forName oracle jdbc driver OracleDriver 如果加载的的驱动程序不存在 Class forName 方法将会抛出ClassNotFoundException异常 此时同样需要应用程序处理异常 2 加载MicrosoftSQLServerJDBC驱动程序用DriverManager类加载MicrosoftSQLServerJDBC驱动程序的Java代码如下所示 DriverManager registerDriver newcom microsoft jdbc sqlserver SQLServerDriver 使用java lang Class类加载MicrosoftSQLServerJDBC驱动程序的Java代码如下所示 Class forName com microsoft jdbc sqlserver SQLServerDriver 其中 com microsoft jdbc sqlserver SQLServerDriver 是MicrosoftSQLServerJDBC驱动程序的类名 3 加载InterClientJDBC驱动程序InterClientJDBC驱动程序的类名是interbase interclient Driver 用DriverManager类加载InterClientJDBC驱动程序的Java代码如下所示 DriverManager registerDriver newinterbase interclient Driver 使用java lang Class类加载JDBC ODBC驱动程序的Java代码如下所示 Class forName interbase interclient Driver 4 加载PostgreSQLJDBC驱动程序PostgreSQLJDBC驱动程序的类名是org postgresql Driver 用DriverManager类加载PostgreSQLJDBC驱动程序的Java代码如下所示 DriverManager registerDriver newcorg postgresql Driver 使用java lang Class类加载PostgreSQLJDBC驱动程序的Java代码如下所示 Class forName org postgresql Driver newInstance 其中 org postgresql Driver 是PostgreSQLJDBC驱动程序的类名 5 加载MySQLJDBC驱动程序MySQLJDBC驱动程序的类名是org gjt mm mysql Driver 用DriverManager类加载MySQLJDBC驱动程序的Java代码如下所示 DriverManager registerDriver neworg gjt mm mysql Driver 使用java lang Class类加载MySQLJDBC驱动程序的Java代码如下所示 Class forName org gjt mm mysql Driver newInstance 其中 org gjt mm mysql Driver 是MySQLJDBC驱动程序的类名 6 加载JDBC ODBC桥驱动程序用DriverManager类加载JDBC ODBC桥驱动程序的Java代码如下所示 DriverManager registerDriver newsun jdbc JdbcOdbcDriver 使用java lang Class类加载JDBC ODBC驱动程序的Java代码如下所示 Class forName sun jdbc odbc JdbcOdbcDriver 其中 sun jdbc odbc JdbcOdbcDriver 是数据库驱动程序的类名 加载了数据库的JDBC驱动程序之后 就可以创建与数据库的连接了 与数据库建立连接的常用方法是调用DriverManager类的静态方法getConnection Stringconnect string 其代码如下 Connectionconn DriverManager getConnection URL User Password 其中 URL User Password是连接数据库需要指定的连接参数 三 创建数据库连接 加载JDBC驱动程序 连接数据库的连接参数 目录 10 1JDBC概述10 2JDBC中的主要接口和类10 3JDBC访问数据库的基本过程10 4SQL查询语言的执行10 5综合应用举例 在建立了与数据库的连接后 应用程序可以在此连接上创建SQL语句对象 以便执行用户定义的SQL语句 10 4SQL查询语言的执行 在建立了与数据库的连接后 应用程序可以在此连接上创建SQL语句对象 以便执行用户定义的SQL语句 在Connection中 提供了3种createStatement 成员方法 用于创建Statement对象 StatementcreateStatement throwsSQLException StatementcreateStatement intresultSetType intresultSetConcurrency throwsSQLException StatementcreateStatement intresultSetType intresultSetConcurrency intresultSetHoldability throwsSQLException 10 4 1创建Statement对象 例如 利用不带参数的createStatement方法创建Statement对象的代码如下 Statementstmt conn createStatement conn是已经建立好的数据库连接另外 还可以利用JDBC提供的preparedStatement接口和CallableStatement接口来创建SQL语句对象 由于SQL语句可以分成两大类 一类是数据定义和更新语句 如CREATE INSERT UPDATE和DELETE等语句 另一类是SELECT查询语句 因此 JDBC中的Statement对象提供了执行不同SQL语句的基本处理方法 Statement中定义的executeUpdate 成员方法用于执行数据定义和更新语句 Statement中定义的executeQuery 成员方法用于执行SELECT查询语句 10 4 2执行Statement SQL中的SELECT查询语句 可以使用如下代码 Statementstmt conn createStatement 创建Statement对象ResultSetrset stmt executeQuery SELECTname majorFROMstudent 执行查询语句SQL中的数据更新语句 如DELETE语句 则可以使用如下的代码片段 Statementstmt conn createStatement 创建Statement对象introwcount stmt executeUpdate DELETEFROMstudentWHEREnumber 06070001 执行更新语句 10 4 2执行Statement 如果只能在运行时才能确定SQL语句的类型 则可以使用Statement中的execute 成员方法动态地执行未知类型的SQL语句 这个成员方法将返回一个表示SQL语句类型的布尔值 如果返回真 说明SQL语句是查询语句 否则是更新语句或数据定义语句 示例代码如下 Statementstmt conn createStatement 用execute方法执行SQL语句booleanresult stmt execute statement if result statement是一个查询语句 获取结果集ResultSetrset stmt getResultSet 处理结果 else statement是更新语句或数据定义语句intupdateCount stmt getUpdateCount 处理结果 Statement执行SQL语句之后 将返回一个结果集对象ResultSet 每一个ResultSet对象都有一个游标 cursor 指向结果集的当前位置 游标的初始位置是在结果集的第一行之前 第一次调用next 方法使游标移动到第一行 它返回一个boolean型的数据 当游标移动到最后一行之后返回false 10 4 3处理查询结果集 用户可以通过ResultSet对象提供的定位游标的成员方法对结果集进行遍历 进而用一组getXXX方法获取 或用一组updateXXX方法更新结果集中每一个记录 Record 中的属性值 ResultSet中定位游标的方法 在完成任务之后 程序必须自己关闭结果集ResultSet对象和Statement对象 而不能像一般的Java对象那样等待Java虚拟机进行垃圾回收 因为这些对象并不是利用new运算符创建的对象 而是由底层JDBC驱动程序创建的 因此必须用Java代码通知底层驱动程序释放它们 否则就有可能造成内存的泄漏 导致数据库服务器资源不足 10 4 4关闭数据库连接 下面是一些关闭结果集ResultSet对象和Statement对象的代码 rset close 关闭结果集对象rsetstmt close 关闭Statement对象stmt在关闭了结果集对象ResultSet和Statement对象后 还要关闭连接对象 代码为 conn close 关闭连接对象conn对于服务器端的缺省连接则不需要关闭 目录 10 1JDBC概述10 2JDBC中的主要接口和类10 3JDBC访问数据库的基本过程10 4SQL查询语言的执行10 5综合应用举例 10 5综合应用举例 本章主要介绍了使用JDBC访问数据库的一些技术 包括Java访问数据库的类和接口的使用方法 利用JDBC访问数据库的基本访问过程和一些使用技巧 本节将通过一些数据库的高级访问功能进一步展示综合应用这些知识的基本方法与技巧 10 5 1可滚动查询集 虽然通过Resu

温馨提示

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

评论

0/150

提交评论