




已阅读5页,还剩78页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第16章设计数据存取类 对象持久性简介设计数据存取类问题域类与数据存取类通信使用文件实现持久性使用数据库实现持久性 16 1对象持久性简介 两种使对象持久性的方法 属性存储和对象存储 属性存储 从类的实例中检索属性值 然后将这些值写入文件或数据库中 以后需要此实例时 按照相反的顺序重新创建实例 即从数据文件或数据库中读取数据 填充属性 进行实例化 对象存储 使用对象串行化技术将整个实例写入文件或数据库中 好处是可以检索完整的实例 不必重新创建 16 2设计数据存取类 设计DA类的优点数据输入与输出代码与其他类隔离 可以显著减少维护的工作量 三层体系结构支持客户 服务器模型 GUI PD和DA功能可能驻留在多个站点的多台机器上 16 2设计数据存取类 例如 为Book类编写名为BookDA的DA类 该类可为客户程序提供数据存储和检索服务 只有PD类会调用该DA类中的方法 需要数据存储和检索服务的类必须调用PD类的DA方法 这样 就会轮流调用BookDA类的方法 由于不需要创建DA类的实例 因此 DA类的所有方法都是静态的 16 2设计数据存取类 BookDA和Book提供的4项基本任务是 检索图书 存储图书 更改图书信息和删除图书 可以使用名为find addNew update和delete的方法 并在DA类中实现这些方法 16 2设计数据存取类 查找图书find方法 用书号作为图书的唯一标识 找到图书之后 返回对图书的引用 如果找不到对应的图书 该方法会创建并抛出自定义异常类的一个实例NotFoundException publicstaticBookfind StringbookNo throwsNotFoundException 16 2设计数据存取类 添加图书addNew方法 向系统中添加图书 先确定现有图书的书号与正在添加的图书的书号是否相同 如果相同 该方法会创建并抛出自定义异常类的一个实例DuplicationException publicstaticvoidaddNew Bookbook throwsDuplicationException 16 2设计数据存取类 更改图书update方法 update方法以参数的形式接收图书引用 查找现有图书并更改书名 作者和价格 如果无法找到该图书 该方法会抛出NotFoundException publicstaticvoidupdate Bookbook throwsNotFoundException 16 2设计数据存取类 删除图书delete方法 从系统中删除图书 与update方法类似 首先查找以参数的形式接收了其引用的图书 然后从数据存储中将其删除 如果无法找到图书 该方法会抛出NotFoundException publicstaticvoiddelete Bookbook throwsNotFoundException 16 2设计数据存取类 其他数据存取方法应用系统启动后执行Initialize方法 打开文件或数据库连接 将需要的数据从文件或数据库中读出 用于初始化问题域对象 publicstaticvoidinitialize 16 2设计数据存取类 其他数据存取方法退出应用系统之前执行terminate方法 将问题域对象存储到文件或数据库中 终止数据库连接 publicstaticvoidterminate 16 2设计数据存取类 其他数据存取方法getAll方法用于读取所有对象 publicstaticVectorgetAll 16 3问题域类与数据存取类通信 为了使DA类与所有其他类 与其匹配的PD类除外 隔离 只能由相应的PD类来调用DA方法 要使Book调用7个DA方法 必须在Book中提供7个对应方法 之后由客户端来调用这7个方法 对原来问题域的Book类做以下修改 取消静态属性books的定义 取消原来定义的initialize方法和getAll方法 16 3问题域类与数据存取类通信 查找图书PD类的find方法是一个静态方法 其用途是调用DA类的find方法 16 3问题域类与数据存取类通信 添加图书PD类的addNew方法 调用DA类中的addNew方法存储新的图书实例 16 3问题域类与数据存取类通信 更改图书PD类的update方法 调用DA类的update方法 也是一个非静态方法 16 3问题域类与数据存取类通信 删除图书PD类的delete方法 调用DA类的delete方法 16 3问题域类与数据存取类通信 其他问题域方法对于DA类中包含的其他方法 如initialize terminate和getAll 在PD类中也必须包含这些方法 16 4使用文件实现持久性 有两种类型的文件结构 顺序文件和随机存取文件 顺序文件包含按连续顺序存储和处理的记录 随机存取文件可以通过指定其记录编号来访问记录 16 4使用文件实现持久性 Java输入 输出流Java中的输入 输出操作通常都是通过输入 输出流来实现的 一个流就是一个从源流向目的地的数据序列 输入 输出流可以与各种数据源和目标相连 16 4使用文件实现持久性 Java输入 输出流为了从信息源获取信息 就需要在程序中打开一个输入流 这个输入流便在信息源与程序之间建立了连接 程序可以从输入流读取信息 当程序需要向目标位置写信息时 便需要打开一个输出流 这个输出流便在程序与输出目标之间建立连接 程序通过输出流向这个目标位置写信息 16 4使用文件实现持久性 Java输入 输出流Java的输入 输出都要通过java io包来实现 java io包提供了一系列支持读 写的java流类 Java使用两种不同的数据流 字符流和字节流 16 4使用文件实现持久性 Java输入 输出流Java的输入 输出都要通过java io包来实现 java io包提供了一系列支持读 写的java流类 Java使用两种不同的数据流 字符流和字节流 16 4使用文件实现持久性 字符流字符流是专门用于字符数据的 Java中的字符使用的都是16 bit的Unicode编码 每个字符占两个字节 Unicode可以容纳大多数语言中的所有字符 字符流的源或目标通常是文本文件 16 4使用文件实现持久性 字符流字符流是专门用于字符数据的 Java中的字符使用的都是16 bit的Unicode编码 每个字符占两个字节 Reader和Writer是java io包中所有字符流的抽象基类 Reader提供了输入字符的API及其部分实现 Writer则提供了输出字符的API及其部分实现 16 4使用文件实现持久性 字符流字符流是专门用于字符数据的 Java中的字符绝大多数程序使用Reader和Writer这两个抽象类的一系列子类来读 写文本信息 例如FileReader FileWriter就是用来读 写文本文件的 16 4使用文件实现持久性 字节流字节流通常用于一般目的的输入 输出 这种流通常被用来读写诸如图片 声音之类的二进制数据 事实上 绝大多数数据都是以二进制文件存储的 16 4使用文件实现持久性 字节流InputStream和OutputStream是用来处理8位字节流的抽象基类 程序使用这两个类的子类来读写8位的字节信息 这些子类中有两个特殊的类ObjectInputStream和ObjectOutputStream 它们可用来读 写对象 16 4使用文件实现持久性 java io包中的常用类 16 4使用文件实现持久性 java io包中的常用类 16 4使用文件实现持久性 使用顺序文件实现持久性在顺序文件中存储属性值initialize方法读取包含图书的属性值的图书记录 为每条记录创建图书实例 然后将这些图书的实例引用置于Vector实例中 terminate方法将Vector中每个图书实例的属性值写入到文件中 16 4使用文件实现持久性 使用顺序文件实现持久性初始的BookDA类定义 16 4使用文件实现持久性 使用顺序文件实现持久性增加initialize 方法 16 4使用文件实现持久性 使用顺序文件实现持久性增加initialize 方法 16 4使用文件实现持久性 使用顺序文件实现持久性增加initialize 方法 16 4使用文件实现持久性 使用顺序文件实现持久性terminate 方法 16 4使用文件实现持久性 使用顺序文件实现持久性find 方法 16 4使用文件实现持久性 使用顺序文件实现持久性addNew方法 16 4使用文件实现持久性 使用顺序文件实现持久性update方法 16 4使用文件实现持久性 使用顺序文件实现持久性delete方法 16 4使用文件实现持久性 使用顺序文件实现持久性getAll方法 16 4使用文件实现持久性 使用顺序文件实现持久性BookDA类定义中所用到的异常类 16 4使用文件实现持久性 测试BookDA类编写TesterOne类 完成以下任务 创建两本新的图书实例 调用initialize方法 调用addNew添加两本要存储的新图书 调用find检索对第一本图书的引用 调用getAll以检索两本图书的引用 为第二本图书调用delete并验证删除 更改第一本图书的价格并验证更改 调用terminate方法 16 4使用文件实现持久性 测试BookDA类 16 4使用文件实现持久性 测试BookDA类 16 4使用文件实现持久性 测试BookDA类 16 4使用文件实现持久性 测试BookDA类 16 4使用文件实现持久性 测试BookDA类 16 4使用文件实现持久性 使用随机存取文件实现持久性将BookDA类中静态属性bookFile的以下定义 staticFilebookFile newFile Book dat 改为 staticFilebookFile newFile Book ran 16 4使用文件实现持久性 使用随机存取文件实现持久性修改initialize方法 16 4使用文件实现持久性 使用随机存取文件实现持久性修改initialize方法 16 4使用文件实现持久性 使用随机存取文件实现持久性修改initialize方法 16 4使用文件实现持久性 使用随机存取文件实现持久性terminate方法 16 4使用文件实现持久性 使用对象串行化技术实现持久性使用对象串行化技术将实例写入某个文件中 以后再读取它们 可以检索到完整的实例 不需要重新创建它们 java io包中提供了专门用于对象信息存储和读取的输入输出流类ObjectInputStream和ObjectOutputStream 16 4使用文件实现持久性 使用对象串行化技术实现持久性要实现对象的序列化 这个对象所属的类必须实现Serializable接口 例如 要实现Book对象的序列化 就需要对Book类的类头进行修改 使其实现java io Serializable接口 16 4使用文件实现持久性 使用对象串行化技术实现持久性将BookDA类中静态属性bookFile的以下定义 staticFilebookFile newFile Book ran 改为 staticFilebookFile newFile Book obj 16 4使用文件实现持久性 使用对象串行化技术实现持久性initialize方法 16 4使用文件实现持久性 使用对象串行化技术实现持久性terminate方法 16 5使用数据库实现持久性 Access数据库已知Access数据库BookStore mdb中包含表T CUSTOMER和T BOOK 16 5使用数据库实现持久性 Access数据库访问此数据库需要两个协议 Java数据库连接 JDBC 和开放式数据库连接 ODBC JDK提供一个名为JdbcOdbcDriver的驱动程序 该驱动程序在JDBC和ODBC之间起桥接作用 ODBC要求将数据库注册为数据源名 然后用此数据源名代替实际的数据库 为数据库BookStore mdb建立数据源BookStoreDB 16 5使用数据库实现持久性 java sql包java sql包中提供了操作关系数据库的多个类 在java程序中可调用这些类的方法 DriverManager类 提供了getConnection方法 可建立到数据库的连接 并返回一个连接实例 Connection类 提供了createStatement方法 该方法返回一个语句实例 用于执行SQL语句 Statement类 提供了执行SQL语句的方法executeQuery 16 5使用数据库实现持久性 java sql包ResultSet类包含由Statement类提供的executeQuery方法返回的数据实例 数据包含0到n行数据 ResultSet类提供的方法first next last和previous将光标指向某一行 方法getInt getString等用于检索行中的数据 16 5使用数据库实现持久性 使用数据库实现持久性时 需要对BookDA类中的方法进行修改 initialize方法的功能是与数据库建立连接 find addNew update delete及getAll方法用于直接访问数据库 terminate方法用于切断与数据库的连接 16 5使用数据库实现持久性 BookDA类的属性定义 16 5使用数据库实现持久性 initialize方法在initialize方法中加载JDBC ODBC驱动程序 创建链接到该数据库的一个连接实例 通过调用Class类的forName方法来加载该驱动程序 通过调用DriverManager类中的getConnection方法创建连接实例 16 5使用数据库实现持久性 initialize方法 16 5使用数据库实现持久性 terminate方法在terminate方法中关闭数据库连接 调用Statement和Connection实例的close方法 16 5使用数据库实现持久性 find方法使用SQLSELECT语句从数据库中检索特定图书的属性值 这些值被返回到ResultSet的一个实例中 随后可调用该实例的方法来提取这些属性值 如果没有找到 该方法会抛出NotFoundException 16 5使用数据库实现持久性 find方法使用SQLSELECT语句从数据库中检索特定图书的属性值 这些值被返回到ResultSet的一个实例中 随后可调用该实例的方法来提取这些属性值 16 5使用数据库实现持久性 find方法 16 5使用数据库实现持久性 addNew方法首先调用Book存取器方法获取属性值 然后调用find方法查看此书是否存在 如果存在 就会抛出DuplicateException 如果不存在 就会抛出NotFoundException 在NotFoundException的catch代码块中调用executeUpdate方法执行SQLINSERT语句 16 5使用数据库实现持久性 addNew方法 16 5使用数据库实现持久性
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 盈利能力与风险管理策略的关系试题及答案
- 黑龙江省大庆市一中学2025届数学七下期末统考试题含解析
- 移动互联网企业的技术挑战试题及答案
- 2025年市场风险与机遇分析试题及答案
- 环保投资的财务考量计划
- 网络性能评估试题及答案解析
- 跨学科研讨会策划计划
- 软件技术员试题及答案创新指南
- 加强自我驱动的工作态度计划
- 财务模型与商业模式的协同试题及答案
- 上海市2023-2024学年五年级下册第1-3单元期中模拟测试数学试卷(沪教版)
- 安全教育记录表(防暑降温教育)
- 2024年南京金牛茉莉旅游开发有限公司招聘笔试参考题库附带答案详解
- 部编版四年级语文下册1-8单元习作范文
- 《管理情绪》课件
- 人民网舆情培训课件
- 2019新人教版高中英语选择性必修四全册课文原文Word(可编辑)
- 富氢水完整课件
- 全体人民共同的价值追求
- 麻痹性肠梗阻汇报演示课件
- 广东省广州市越秀区2024年中考二模语文试卷附答案
评论
0/150
提交评论