




已阅读5页,还剩35页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章 JDBC 2 理解JDBC访问数据库的结构及原理了解JDBC四种驱动类型掌握JDBC访问数据库的步骤掌握JDBC中的DriverManager类和Connection ResultSet接口掌握JDBC的常用查询接口掌握JDBC对集元数据的访问掌握JDBC的事务处理 目标 3 JDBC Java数据库连接 JavaDatabaseConnectivity JDBC 是一种用于执行SQL语句的JavaAPI 它由一组用Java编程语言编写的类和接口组成 JDBC为数据库开发人员提供了一个标准的API 使他们能够用纯JavaAPI来编写数据库应用程序 使用JDBC编写的程序能够自动地将SQL语句传送给相应的数据库管理系统 JDBC扩展了Java的功能 由于Java语言本身的特点 使得JDBC具有简单 健壮 安全 可移植 获取方便等优势 4 JDBC结构 JDBCAPI是Java开发工具包 JDK 的组成部份 由三部分组成 JDBC驱动程序管理器JDBC驱动程序测试工具包JDBC ODBC桥JDBC驱动程序管理器是JDBC体系结构的支柱 其主要作用是把Java应用程序连接到正确的JDBC驱动程序上 JDBC驱动程序测试工具包为JDBC驱动程序的运行提供一定的可信度 只有通过JDBC驱动程序测试包的驱动程序才被认为是符合JDBC标准的 JDBC ODBC桥使ODBC驱动程序可被用作JDBC驱动程序 其目标是为方便实现访问某些不常见的DBMS 它的实现为JDBC的快速发展提供了一条途径 5 JDBC模型 JDBC既支持数据库访问的两层模型 也支持三层模型 两层模型 三层模型 6 JDBC类型 JDBC驱动类型可以归结为以下几类 JDBC ODBC桥加ODBC驱动程序本地API部份用Java来编写的驱动程序JDBC网络纯Java驱动程序本地协议纯Java驱动程序JDBC ODBC桥接ODBC驱动程序将JDBC翻译成ODBC 然后使用一个ODBC驱动程序与数据库进行通信 本地API部份用Java来编写的驱动程序 这种类型的驱动程序把客户机API上的JDBC调用转换为Oracle Sybase Informix DB2或其它DBMS的调用 JDBC网络纯Java驱动程序 这种驱动程序将JDBC转换为与DBMS无关的网络协议 这是最为灵活的JDBC驱动程序 本地协议纯Java驱动程序 这种类型的驱动程序将JDBC调用直接转换为DBMS所使用的专用网络协议 是Intranet访问的一个很实用的解决方法 7 ODBC ODBC 开放式数据库连接 API是使用最广的 用于访问关系数据库的编程接口 它可以将所有平台的关系型数据库连接起来 ODBC模型结构 Java中通过JDBC ODBC桥接方式实现ODBC功能调用 8 访问数据库 使用Oracle数据库作为JDBC的访问环境 需做如下准备工作 设置Oracle驱动的类路径 在Oracle的安装路径下找到ojdbc14 jar包 将此工具包导入到工程中 或加入到环境变量CLASSPATH中 创建演示表格及测试数据 CREATETABLEstudent snoVARCHAR2 5 PRIMARYKEY 学生号nameVARCHAR2 10 NOTNULL 学生姓名ageNUMBER 2 NOTNULL 学生年龄sexCHAR 1 NOTNULL 性别 1 男 0 女 添加测试数据INSERTINTOstudentVALUES 95001 张飞 23 1 INSERTINTOstudentVALUES 95002 关羽 23 1 INSERTINTOstudentVALUES 95003 貂蝉 23 0 INSERTINTOstudentVALUES 95005 小乔 23 0 9 连接数据库 使用JDBC访问数据库的基本步骤一般如下 加载JDBC驱动程序建立数据库连接创建Statement对象执行SQL语句处理返回结果关闭创建的对象 10 加载JDBC驱动程序 加载驱动程序的方法 其中DriverName是要加载的JDBC驱动程序名称 驱动程序名称根据数据库厂商提供的JDBC驱动程序的种类来确定 加载JDBC ODBC数据库驱动程序的方法为 加载Oracle数据库驱动程序的方法为 Class forName DriverName Class forName sun jdbc odbc JdbcOdbcDriver Class forName oracle jdbc driver OracleDriver 11 创建数据库连接 1 创建一个数据库连接需要使用DriverManagerDriverManager类是JDBC的管理层 作用于用户和驱动程序之间 跟踪可用的驱动程序 并在数据库和相应驱动程序之间建立连接 该类负责加载 注册JDBC驱动程序 管理应用程序和已注册的驱动程序的连接 DriverManager的常用方法 使用DriverManager类的getConnection 创建一个数据库连接的格式如下 Connectionconn DriverManager getConnection Stringurl Stringuser Stringpassword 12 创建数据库连接 2 URL提供了一种标识数据库位置的方法 可以使相应的驱动程序能够识别该数据库并与它建立连接 JDBCURL由三个部分组成 可以根据子协议的改变而变化 是子协议 指数据库连接的方式 对于JDBC ODBC桥驱动的连接URL是 odbc为子协议名称data source指本地ODBC数据源的名字attribute name和attribute value用于指定建立连接所必须的信息 如用户名 密码等示例 jdbc odbc jdbc Class forName sun jdbc odbc JdbcOdbcDriver ConnectionConn DriverManager getConnection jdbc odbc myscott scott tiger 13 创建数据库连接 3 对于Oracle驱动的连结的URL是 oracle为子协议名称thin是oracle数据库的一种连结方式serverName为Oracle数据库服务器名称 可以是一个域名 也可以是IP地址port为Oracle数据库的端口号 默认为1521instance是数据库的实例名示例 jdbc oracle thin serverName port instance Class forName oracle jdbc driver OracleDriver ConnectionConn DriverManager getConnection jdbc oracle thin localhost 1521 orcl scott tiger 14 Connection Connection是一个接口 表示与数据库的连接 并拥有创建SQL语句的方法 以完成基本的SQL操作 同时为数据库事务处理提供提交和回滚的方法 一个应用程序可与单个数据库建立一个或多个连接 也可以与多个数据库建立连接 Connection接口的常用方法 15 创建Statement 创建完连接之后 可以通过此连接向目标数据库发送SQL语句 在发送SQL语句之前 须创建一个Statement类的对象 该对象负责将SQL语句发送给数据库 如果SQL语句运行后产生结果集 Statement对象会将结果集封装成ResultSet对象并返回 通过调用Connection接口的createStatement方法来创建Statement对象 如 Statementsmt conn createStatement 16 执行SQL语句 获取Statement对象之后 就可以使用该对象的executeQuery 方法来执行SQL语句 如 executeQuery 方法返回一个ResultSet对象 它包含了SQL的查询结果 ResultSetrs smt executeQuery SELECTsno name ageFROMstudent 17 处理返回结果 在JDBC中 SQL的查询结果使用ResultSet封装ResultSet对象维持了执行某个SQL语句后满足条件的所有的行 并提供一系列访问结果集中数据的方法通过调用ResultSet对象的方法 处理返回结果 18 关闭创建的对象 当数据库操作执行完毕或退出应用前 需将数据库访问过程中建立的对象按顺序关闭 防止系统资源浪费 关闭的次序是 关闭结果集关闭Statement对象关闭连接JDBC实例 DBUtil java 19 操作数据库 在JDBC中要执行SQL查询语句可以通过执行一般查询 参数查询和存储过程三种方式 三种不同的接口 StatementPreparedStatementCallableStatement 20 Statement 1 Statement接口用于执行静态的SQL语句 静态的SQL语句不需要接收任何参数 Statement主要功能是将SQL语句传送给数据库 并将SQL语句的执行结果返回 提交的SQL语句可以是 SELECT查询语句SQLDML语句 如 INSERT UPDATE或DELETESQLDDL语句 如 CREATETABLE和DROPTABLEStatement接口的常用方法及 21 Statement 2 Statement接口提供了三种执行SQL语句的方法 executeQuery executeUpdate execute executeQuery 方法用于产生单个结果集的语句 例如SELECT语句 executeUpdate 方法用于执行INSERT UPDATE或DELETE语句以及SQLDDL语句 如CREATETABLE和DROPTABLE executeUpdate的返回值是一个整数 指示受影响的行数 即更新计数 对于CREATETABLE或DROPTABLE等语句 executeUpdate的返回值总为零 execute 方法用于执行返回多个结果集 多个更新计数或二者的组合execute 方法比较特殊 一般是在用户不知道执行SQL语句后会产生什么结果或可能有多种类型的结果产生时才会使用 22 ResultSet 1 ResultSet封装了Statement的executeQuery 方法返回的结果集 即符合SQL语句中指定条件的所有行 ResultSet维护了指向当前行的游标 并提供了许多方法用来操作结果集中的游标 同时提供了一套getXXX 方法对结果集中的数据进行访问 ResultSet常用方法 23 结果集由数据行组成 可以在一个循环中使用resultSet next 方法来访问并获取每行数据一个结果集维持一个指向当前行的指针最初这个指针指向第一行之前 所以需调用resultSet next 方法访问第一行 然后再进行处理连续调用next 方法将使指针依次指向结果集各行当没有下一行时 返回值是false resultSet next 数据行 结果集 第一列的序号为1而不是0 24 ResultSet 2 ResultSet维护指向当前数据行的游标 最初它位于第一行之前 每调用一次next 方法 游标向下移动一行 从而按照从上至下的次序获取ResultSet数据行 ResultSet提供一套getXXX 方法对结果集中游标指向的行进行取值 在使用getXXX 方法取值时 一定要注意数据库的字段数据类型和Java的数据类型之间的匹配 25 ResultSet 3 使用getXXX 方法进行取值时 可通过列名或列号标识要获取数据的列 如 列是从左至右编号的 并且从1开始列名不区分大小写示例 StatementDemo java Statementstmt conn createStatement ResultSetrs stmt executeQuery selectSql while rs next System out println 行 rs getRow rs getString 1 rs getString 2 rs getString 3 执行添加intcount stmt executeUpdate insertSql System out println 添加 count 行 执行修改count stmt executeUpdate updateSql System out println 修改 count 行 执行删除count stmt executeUpdate deleteSql Stringname rs getString name Stringname rs getString 1 26 PreparedStatement PreparedStatement接口是Statement接口的子接口 它继承了Statement的所有功能 PrepardStatement接口有两大特点 执行速度要快于Statement对象SQL语句中提供参数 提高程序的灵活性和执行效率PreparedStatement对象是通过Connection的prepareStatement 方法创建 SQL语句中的参数使用 作为占位符示例 PreparedStatementDemo java StringinsertSql INSERTINTOstudentVALUES PreparedStatementpstmt conn prepareStatement insertSql 27 PreparedStatement 在执行带参数的SQL语句前 必须对 进行赋值 PreparedStatement接口中增添了大量的setXXX 方法 通过占位符的索引完成对输入参数的赋值 XXX根据不同的数据类型选择 示例 执行添加pstmt conn prepareStatement insertSql 为占位符赋值pstmt setString 1 95008 pstmt setString 2 周瑜 pstmt setInt 3 19 pstmt setString 4 1 intcount pstmt executeUpdate System out println 添加 count 行 28 CallableStatement 1 存储过程是数据库中已经存在的SQL语句 在JDBC中执行数据库中的存储过程可以使用CallableStatement对象 CallableStatement接口继承了Statement接口和PreparedStatement接口 它具有两者的特点 可以处理一般的SQL语句 也可以处理输入参数 同时它还定义了OUT 输出 参数以及INOUT 输入输出 参数的处理方法 CallableStatement对象可以使用Connection类的prepareCall 方法 proc name是需要调用的存储过程名称 存储过程有参数 可使用占位符 代替 例如 CallableStatementcstmt conn prepareCall callproc name CallableStatementcstmt conn prepareCall callproc name 29 CallableStatement 2 在执行一个存储过程之前 必须先对其中的OUT参数进行类型注册 注册方式如下 第一个参数为对应存储过程占位符 第二个参数为对应占位符的变量的类型 通过java sql Types的静态常量来指定 例如 Types FLOAT Types INTEGER等 示例 CallableStatementDemo java当使用getXXX 方法获取OUT参数的值时 XXX对应的Java类型必须与所注册的SQL类型相符 如果存储过程有返回值 使用下面的方式调用 registerOutParamenter intindex intsqlType cstmt registerOutParameter 2 java sql Types VARCHAR CallableStatementcstmt conn prepareCall callproc name 30 元数据 元数据 MetaData 就是有关数据库和表格结构的信息 如 数据库中的表 表的列 表的索引 数据类型 对SQL的支持程度等信息 元数据类型 DatabaseMetaDataResultSetMetaData 31 DatabaseMetaData DatabaseMetaData接口主要是用来得到关于数据库的信息 如 表格的列表 系统函数 关键字 数据库产品名和数据库支持的JDBC驱动器名DatabaseMetaData对象是通过Connection的getMetaData 方法获取 DatabaseMetaData的方法可分为两大类 一类返回值为boolean型 多用以检查数据库或驱动器是否支持某项功能另一类则用获取数据库或驱动器本身的某些特征值 32 示例 DatabaseMetaDataDemo java 33 ResultSetMetaData ResultSetMetaData接口主要用来获取结果集的结构 如 结果集的列的数量 列的名字等 ResultSetMetaData对象可以通过ResultSet的getMetaData 方法获取 ResultSetMetaData的常用方法及功能 示例 ResultSetMetaDataDemo java 34 事务操作 事务是构成单一逻辑工作单位的操作集合 已提交事务是指成功执行完毕的事务 未能成功完成的事务称为中止事务 对中止事务造成的变更需要进行撤销处理 称为事务回滚 事务具有ACID4个特性 原子性 事务中的全部操作在数据库中是不可分割的 要么全部完成 要么均不执行 一致性 几个并行执行的事务 其执行结果必须与按某一顺序串行执行的结果相一致 隔离性 事务的执行不受其他事务的干扰 事务执行的中间结果对其他事务必须是透明的 持久性 对于任意已提交事务 系统必须保证该事务对数据库的改变不被丢失 即使数据库出现故障 35 事务 事务操作缺省是自动提交 一条对数据库的更新操作成功后 系统将自动调用commit 方法提交失败调用rollback 方法来回滚 为了能将多个JDBC语句组合成一个操作单元 以保证数据的一致性 可以禁止自动提交 之后把多个数据库操作的表达式作为一个事务 在操作完成后调用commit 来进行整体提交 倘若其中一个表达式操作失败 可以在异常捕获时调用rollback 进行回滚 利用Connectio
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 钩机合同协议书
- 年会策划合同协议书
- 美甲店股份合同协议书
- 就业意向协议书合同
- 楼板浇筑合同协议书
- 砂石入股合同协议书
- 增资合同协议书范本
- 终止建房合同协议书
- 马匹寄养合同协议书
- 终止运输合同协议书
- 第15课《青春之光》课件-2024-2025学年统编版语文七年级下册
- 《十万个为什么》整本书阅读-课件-四年级下册语文(统编版)
- 2023版押品考试题库必考点含答案
- 口腔与健康智慧树知到答案章节测试2023年温州医科大学
- 2022年执业医师证件租赁协议书
- 太上三官宝经(共12页)
- Q∕GDW 11445-2015 国家电网公司管理信息系统安全基线要求
- java考试管理系统源代码开题报告外文翻译英文文献计001
- 人教版九年级历史中考【政治经济专题复习课件44张】(共44张)
- T∕CSEA 6-2018 锌镍合金电镀技术条件
- 《大学英语三》题库及答案
评论
0/150
提交评论