- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第12章设计数据访问类
第12章 设计数据存取类;两种方法:属性存储, 对象存储。
属性存储:从实例中检索属性值,然后将这些值写入文件中。以后需要此实例时按照相反的顺序重新创建该客户实例:首先从客户数据文件中读取数据,填充属性,进行实例化。
对象存储:使用对象串行化技术将整个实例写入一个文件中。好处是可以检索完整的实例;不必重新创建。; 数据存取(DA)类的基本用途:是提供存储和检索数据并使PD类的实例持久的方法。
设计DA类的优点:
数据输入与输出代码与其它类隔离,可以显著减少维护的工作量;
三层体系结构支持客户—服务器模型,GUI、PD和DA功能可能驻留在多个站点的多台机器上。
;DA类的要求:
只能由PD类来调用DA方法,从而将DA类进一步隔离。这意味着只有PD类知道DA类。DA类提供的服务是由PD类提供的。;数据存取方法
通常为每个PD类编写一个单独的DA类。如:为Customer类编写名为CustomerDA的DA类,该类可为客户提供数据存储和检索服务;
只有PD类会调用该DA类中的方法。需要数据存储和检索服务的类必须调用Customer中的DA方法,这样,就会轮流调用CustomerDA方法。
由于不需要创建DA类的实例,它所有的方法都是静态的。;CustomerDA和Customer提供的4项基本任务是:
检索客户、存储客户、更改客户的数据和删除客户。
可以使用名为find、addNew、update和delete的方法在DA类中实现这些方法。;1. 查找客户;2. 添加客户;3. 更改客户;4. 删除客户;5. 附加的数据存取方法;为了使DA类与所有其它类(与其匹配的PD类除外)隔离,只能由相应的PD类来调用DA方法。
要使Customer调用7个DA方法,必须在Customer中提供7个对应方法,之后由客户端来调用这7个方法。
这些方法的唯一用途是充当其他类和DA类之间的缓冲区。
为减少维护量,这些方法应对使用的数据存储方式不敏感。;1 查找客户;2 添加客户;3 更改客户;4 删除客户;5 附加的问题域方法;Java以字节流或数据流的形式查看数据输入和输出
三种文件结构: 顺序、随机存取、数据库。
顺序文件: 包含按照连续顺序存储和处理的记录。
随机存取文件:通过指定其记录编号即可访问记录。使用随机存取文件时应使用RandomAccessFile类和它的readLine与writeBytes方法。
数据库:组织用来帮助进行查询的一个或更多个文件。;属性存储:在顺序文件和随机文件中存储属性值
initialize方法:读取包含客户的属性值的客户记录,为每条记录创建客户实例,然后将这些客户的实例引用置于Vector实例中。
terminate方法:将Vector中每个客户实例的属性值写入到文件中。
在CustomerDA的开头声明两个变量:
static Vector customers;
static File customerFile = new File(“Customer.dat”);;1. initialize方法; // create customer instance and add reference to Vector customers
if(name != null)
customers.addElement(new Customer(name, address, phoneNo));
} while(phoneNo != null);
}
catch (Exception e)
{System.out.println (e);}
}
}
;BufferedReader
从字符输入流中读取文本,缓冲各个字符,从而实现字符、数组和行的高效读取。
可以指定缓冲区的大小,或者可使用默认的大小。大多数情况下,默认值就足够大了。
如果没有缓冲,则每次调用 read() 或 readLine() 都会导致从文件中读取字节,并将其转换为字符后返回,而这是极其低效的。 ;2. terminate方法;3. find方法;4. addNew方法;5. update方法;6. delete方法;
if (!foundIt)
throw (new NotFoundException(not found ));
}
}
;7. getAll方法;8. DuplicateException和NotFoundException类;编写TesterOne类,完成以下任务:
创建两个新的客户实例;
调用initialize方法;
调用addNew添加两个要存储的新客户;
调用find检索对第一位客户的引用;
调用getAll以检索对这两位客户的引用;
为第二位客户调用delete并验证删
文档评论(0)