第11章 JDBC数据库编程.ppt_第1页
第11章 JDBC数据库编程.ppt_第2页
第11章 JDBC数据库编程.ppt_第3页
第11章 JDBC数据库编程.ppt_第4页
第11章 JDBC数据库编程.ppt_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

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

文档简介

Java实用教程 第11章JDBC数据库编程 第11章JDBC数据库编程 11 1JDBC概述11 2JDBC中的常用接口11 3连接数据库11 4操作数据库10 5网络聊天11 5应用JDBC事务 11 2JDBC中的常用接口 JDBC提供了众多的接口和类 通过这些接口和类 可以实现与数据库的通信 本节将详细介绍一些常用的JDBC接口和类 11 2 1Driver接口 每种数据库的驱动程序都应该提供一个实现java sql Driver接口的类 简称Driver类 在加载某一驱动程序的Driver类时 它应该创建自己的实例并向java sql DriverManager类注册该实例 通常情况下通过java lang Class类的静态方法forName StringclassName 加载欲连接数据库的Driver类 该方法的入口参数为欲加载Driver类的完整路径 成功加载后 会将Driver类的实例注册到DriverManager类中 如果加载失败 将抛出ClassNotFoundException异常 即未找到指定Driver类的异常 11 2 2DriverManager类 java sql DriverManager类负责管理JDBC驱动程序的基本服务 是JDBC的管理层 作用于用户和驱动程序之间 负责跟踪可用的驱动程序 并在数据库和驱动程序之间建立连接 另外 DriverManager类也处理诸如驱动程序登录时间限制及登录和跟踪消息的显示等工作 成功加载Driver类并在DriverManager类中注册后 DriverManager类即可用来建立数据库连接 当调用DriverManager类的getConnection 方法请求建立数据库连接时 DriverManager类将试图定位一个适当的Driver类 并检查定位到的Driver类是否可以建立连接 如果可以则建立连接并返回 如果不可以则抛出SQLException异常 DriverManager类 DriverManager类提供的常用静态方法如下表所示 11 2 3Connection接口 java sql Connection接口代表与特定数据库的连接 在连接的上下文中可以执行SQL语句并返回结果 还可以通过getMetaData 方法获得由数据库提供的相关信息 例如数据表 存储过程和连接功能等信息 Connection接口提供的常用方法如下表所示 11 2 4Statement接口 java sql Statement接口用来执行静态的SQL语句 并返回执行结果 例如 对于INSERT UPDATE和DELETE语句 调用executeUpdate Stringsql 方法 对于SELECT语句 则调用executeQuery Stringsql 方法 并返回一个永远不能为null的ResultSet实例 Statement接口提供的常用方法如下表所示 11 2 5PreparedStatement接口 java sql PreparedStatement接口继承并扩展了Statement接口 用来执行动态的SQL语句 即包含参数的SQL语句 通过PreparedStatement实例执行的动态SQL语句将被预编译并保存到PreparedStatement实例中 从而可以反复并且高效地执行该SQL语句 需要注意的是 在通过setXxx 方法为SQL语句中的参数赋值时 建议利用与参数类型匹配的方法 也可以利用setObject 方法为各种类型的参数赋值 PreparedStatement接口的使用方法如下 PreparedStatement接口提供的常用方法如下表所示 PreparedStatementps connection prepareStatement select fromtable namewhereid and name orname ps setInt 1 6 ps setString 2 马先生 ps setObject 3 李先生 ResultSetrs ps executeQuery 11 2 6CallableStatement接口 java sql CallableStatement接口继承并扩展了PreparedStatement接口 用来执行SQL的存储过程 JDBCAPI定义了一套存储过程SQL转义语法 该语法允许对所有RDBMS通过标准方式调用存储过程 该语法定义了两种形式 分别是包含结果参数和不包含结果参数的形式 如果使用结果参数 则必须将其注册为OUT型参数 参数是根据定义位置按顺序引用的 第一个参数的索引为1 为参数赋值的方法使用从PreparedStatement类中继承来的setXXX 方法 在执行存储过程之前 必须注册所有OUT参数的类型 它们的值是在执行后通过getXxx 方法获得的 CallableStatement接口可以返回一个或多个ResultSet对象 处理多个ResultSet对象的方法是从Statement中继承来的 11 2 7ResultSet接口 java sql ResultSet接口类似于一个数据表 通过该接口的实例可以获得检索结果集 以及对应数据表的相关信息 例如列名和类型等 ResultSet实例通过执行查询数据库的语句生成 ResultSet实例具有指向当前数据行的指针 最初 指针指向第一行记录 通过next 方法可以将指针移动到下一行 如果存在下一行该方法则返回true 否则返回false 所以可以通过while循环来迭代ResultSet结果集 默认情况下ResultSet实例不可以更新 只能移动指针 所以只能迭代一次 并且只能按从前向后的顺序 如果需要 可以生成可滚动和可更新的ResultSet实例 ResultSet接口 ResultSet接口提供了从当前行检索不同类型列值的getXxx 方法 均有两个重载方法 分别根据列的索引编号和列的名称检索列值 其中以列的索引编号较为高效 编号从1开始 对于不同的getXxx 方法 JDBC驱动程序尝试将基础数据转换为与getXxx 方法相应的Java类型并返回 在JDBC2 0API之后 为该接口添加了一组更新方法updateXxx 均有两个重载方法 分别根据列的索引编号和列的名称指定列 可以用来更新当前行的指定列 也可以用来初始化要插入行的指定列 但是该方法并未将操作同步到数据库 需要执行updateRow 或insertRow 方法完成同步操作 ResultSet接口提供的常用方法如下表所示 11 3连接数据库 在访问数据库时 首先要加载数据库的驱动程序 不过只需在第一次访问数据库时加载一次 然后在每次访问数据库时创建一个Connection实例 紧接着执行操作数据库的SQL语句 并处理返回结果 最后在完成此次操作时销毁前面创建的Connection实例 释放与数据库的连接 11 3 1加载JDBC驱动程序 在与数据库建立连接之前 必须先加载欲连接数据库的驱动程序到JVM Java虚拟机 中 加载方法为通过java lang Class类的静态方法forName StringclassName 成功加载后 会将加载的驱动类注册给DriverManager类 如果加载失败 将抛出ClassNotFoundException异常 即未找到指定的驱动类 所以需要在加载数据库驱动类时捕捉可能抛出的异常 通常情况下将负责加载数据库驱动的代码放在static块中 因为static块的特点是只在其所在类第一次被加载时执行 即第一次访问数据库时执行 这样就可以避免反复加载数据库驱动 减少对资源的浪费 同时提高了访问数据库的速度 例11 1 11 3 2创建数据库连接 java sql DriverManager 驱动程序管理器 类是JDBC的管理层 负责建立和管理数据库连接 通过DriverManager类的静态方法getConnection Stringurl Stringuser Stringpassword 可以建立数据库连接 3个参数依次为欲连接数据库的路径 用户名和密码 该方法的返回值类型为java sql Connection 例11 2 11 3 3执行SQL语句 建立数据库连接 Connection 的目的是与数据库进行通信 实现方法为执行SQL语句 但是通过Connection实例并不能执行SQL语句 还需要通过Connection实例创建Statement实例 Statement实例又分为3种类型 1 Statement实例 该类型的实例只能用来执行静态的SQL语句 2 PreparedStatement实例 该类型的实例增加了执行动态SQL语句的功能 3 CallableStatement实例 该类型的实例增加了执行数据库存储过程的功能 上面给出三种不同的类型中Statement是最基础的 PreparedStatement继承Statement 并做了相应的扩展 而CallableStatement继承了PreparedStatement 又做了相应的扩展 在11 4节将详细介绍各种类型实例的使用方法 11 3 4获得查询结果 通过Statement接口的executeUpdate 或executeQuery 方法 可以执行SQL语句 同时将返回执行结果 如果执行的是executeUpdate 方法 将返回一个int型数值 代表影响数据库记录的条数 即插入 修改或删除记录的条数 如果执行的是executeQuery 方法 将返回一个ResultSet型的结果集 其中不仅包含所有满足查询条件的记录 还包含相应数据表的相关信息 例如每一列的名称 类型和列的数量等 11 3 5关闭连接 在建立Connection Statement和ResultSet实例时 均需占用一定的数据库和JDBC资源 所以每次访问数据库结束后 应该及时销毁这些实例 释放它们占用的所有资源 方法是通过各个实例的close 方法 执行close 方法时建议按照如下的顺序 resultSet close statement close connection close 建议按上面的顺序关闭的原因在于Connection是一个接口 close 方法的实现方式可能多种多样 关闭连接 如果是通过DriverManager类的getConnection 方法得到的Connection实例 在调用close 方法关闭Connection实例时会同时关闭Statement实例和ResultSet实例 但是通常情况下需要采用数据库连接池 在调用通过连接池得到的Connection实例的close 方法时 Connection实例可能并没有被释放 而是被放回到了连接池中 又被其他连接调用 在这种情况下如果不手动关闭Statement实例和ResultSet实例 它们在Connection中可能会越来越多 虽然JVM的垃圾回收机制会定时清理缓存 但是如果清理得不及时 当数据库连接达到一定数量时 将严重影响数据库和计算机的运行速度 甚至导致软件或系统瘫痪 11 4操作数据库 访问数据库的目的是操作数据库 包括向数据库插入记录或修改 删除数据库中的记录 或者是从数据库中查询符合一定条件的记录 这些操作既可以通过静态的SQL语句实现 也可以通过动态的SQL语句实现 还可以通过存储过程实现 具体采用的实现方式要根据实际情况而定 在增 删 改数据库中的记录时 分为单条操作和批量操作 单条操作又分为一次只操作一条记录和一次只执行一条SQL语句 批量操作又分为通过一条SQL语句 只能是UPDATE和DELETE语句 操作多条记录和一次执行多条SQL语句 11 4 1添加数据 在添加记录时 一条INSERT语句只能添加一条记录 如果只需要添加一条记录 通常情况下通过Statement实例完成 例11 3 例11 4 例11 5 例11 6 例11 7 11 4 2查询数据 在查询数据时 既可以利用Statement实例通过执行静态SELECT语句完成 也可以利用PreparedStatement实例通过执行动态SELECT语句完成 还可以利用CallableStatement实例通过执行存储过程完成 1 利用Statement实例通过执行静态SELECT语句查询数据的典型代码如下 2 利用PreparedStatement实例通过执行动态SELECT语句查询数据的典型代码如下 ResultSetrs statement executeQuery select fromtb recordwheresex 男 Stringsql select fromtb recordwheresex PreparedStatementprpdStmt connection prepareStatement sql prpdStmt setString 1 男 ResultSetrs prpdStmt executeQuery 查询数据 3 利用CallableStatement实例通过执行存储过程查询数据的典型代码如下 无论利用哪个实例查询数据 都需要执行executeQuery 方法 这时才真正执行SELECT语句 从数据库中查询符合条件的记录 该方法将返回一个ResultSet型的结果集 在该结果集中不仅包含所有满足查询条件的记录 还包含相应数据表的相关信息 例如每一列的名称 类型和列的数量等 例11 8 例11 9 Stringcall callpro record select by sex CallableStatementcablStmt connection prepareCall call cablStmt setString 1 男 ResultSetrs cablStmt executeQuery 11 4 3修改数据 在修改数据时 即可以利用Statement实例通过执行静态UPDATE语句完成 也可以利用PreparedStatement实例通过执行动态UPDATE语句完成 还可以利用CallableStatement实例通过执行存储过程完成 1 利用Statement实例通过执行静态UPDATE语句修改数据的典型代码如下 2 利用PreparedStatement实例通过执行动态UPDATE语句修改数据的典型代码如下 Stringsql updatetb recordsetsalary 3000whereduty 部门经理 statement executeUpdate sql Stringsql updatetb recordsetsalary whereduty PreparedStatementprpdStmt connection prepareStatement sql prpdStmt setInt 1 3000 prpdStmt setString 2 部门经理 prpdStmt executeUpdate 修改数据 3 利用CallableStatement实例通过执行存储过程修改数据的典型代码如下 无论利用哪个实例修改数据 都需要执行executeUpdate 方法 这时才真正执行UPDATE语句 修改数据库中符合条件的记录 该方法将返回一个int型数 为被修改记录的条数 例11 10 例11 11 Stringcall callpro record update salary by duty CallableStatementcablStmt connection prepareCall call cablStmt setInt 1 3000 cablStmt setString 2 部门经理 cablStmt executeUpdate 11 4 4删除数据 在删除数据时 既可以利用Statement实例通过执行静态DELETE语句完成 也可以利用PreparedStatement实例通过执行动态DELETE语句完成 还可以利用CallableStatement实例通过执行存储过程完成 1 利用Statement实例通过执行静态DELETE语句删除数据的典型代码如下 Stringsql deletefromtb merchandisewheredate 2008 2 14 statement executeUpdate sql 删除数据 2 利用PreparedStatement实例通过执行动态DELETE语句删除数据的典型代码如下 注意 当需要为日期型参数赋值时 如果已经存在java sql Date型对象 可以通过setDate intparameterIndex java sql Datedate 方法为日期型参数赋值 如果不存在java sql Date型对象 也可以通过setString intparameterIndex Stringx 方法为日期型参数赋值 Stringsql deletefromtb merchandisewheredate PreparedStatementprpdStmt connection prepareStatement sql prpdStmt setString 1 2008 2 14 为日期型参数赋值prpdStmt executeUpdate 删除数据 3 利用CallableStatement实例通过执行存储过程删除数据的典型代码如下 无论利用哪个实例删除数据 都需要执行executeUpdate 方法 这时才真正执行DELETE语句 删除数据库中符合条件的记录 该方法将返回一个in

温馨提示

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

评论

0/150

提交评论