数据库应用与开发实验6里有下载地址.docx
《数据库应用与开发实验6里有下载地址.docx》由会员分享,可在线阅读,更多相关《数据库应用与开发实验6里有下载地址.docx(14页珍藏版)》请在冰豆网上搜索。
数据库应用与开发实验6里有下载地址
实验JDBC进阶
(2)
一、相关知识点
1、JDBC基本概念
2、视图、索引
二、实验目的:
理解视图和索引的概念,并通过视图设计简化程序设计,通过索引设计优化查询性能
三、实验内容:
1、设计读者视图view_reader,并修改readerManager类中相关代码。
第一步:
通过查询分析器建立读者视图,要求视图中包含读者类别名称;
第二步:
改造ReaderManager类,将其中的连接查询用视图代替。
第三步:
运行图书管理系统,进行各个功能的测试(读者类别管理、读者管理)
【实验结果与分析】
A、写出视图创建代码。
createviewview_readeras
selectreaderid,readerName,r.readerTypeId,r.lendBookLimitted,createDate,creatorUserId,stopDate,stopUserId,rt.readerTypeName,r.removeDate
fromBeanReaderr,BeanReaderTypertwherer.readerTypeId=rt.readerTypeId
B、给出改造后ReaderManager类的各个方法的代码。
Stringsql="select*"+
"fromview_readerwhereremoveDateisnull"+
"andremoveDateisnull";
Stringsql="select*"+
"fromview_readerwherereaderid=?
";
2、设计图书视图view_book,并修改BookManager类中相关代码。
第一步:
通过查询分析器建立图书视图,要求视图中包含出版社名称;
第二步:
改造BookManager类,将其中的连接查询用视图代替。
第三步:
运行图书管理系统,进行各个功能的测试
【实验结果与分析】
A、写出视图创建代码。
createviewview_book
as
selectb.barcode,b.bookname,b.pubid,b.price,b.state,p.publishername
frombeanbookb,beanpublisherpwhereb.pubid=p.pubid
B、给出改造后ReaderManager类的各个方法的代码。
publicclassBookManager{
publicListsearchBook(Stringkeyword,StringbookState)throwsBaseException{
Listresult=newArrayList();
Connectionconn=null;
try{
conn=DBUtil.getConnection();
//改动处
Stringsql="select*"+
"fromview_bookwherestate='"+bookState+"'";
//
if(keyword!
=null&&!
"".equals(keyword))
sql+="and(b.booknamelike?
orb.barcodelike?
)";
sql+="orderbyb.barcode";
java.sql.PreparedStatementpst=conn.prepareStatement(sql);
if(keyword!
=null&&!
"".equals(keyword)){
pst.setString(1,"%"+keyword+"%");
pst.setString(2,"%"+keyword+"%");
}
java.sql.ResultSetrs=pst.executeQuery();
while(rs.next()){
BeanBookb=newBeanBook();
b.setBarcode(rs.getString
(1));
b.setBookname(rs.getString
(2));
b.setPubid(rs.getString(3));
b.setPrice(rs.getDouble(4));
b.setState(rs.getString(5));
b.setPubName(rs.getString(6));
result.add(b);
}
}catch(SQLExceptione){
e.printStackTrace();
thrownewDbException(e);
}
finally{
if(conn!
=null)
try{
conn.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
returnresult;
}
publicBeanBookloadBook(Stringbarcode)throwsDbException{
Connectionconn=null;
try{
conn=DBUtil.getConnection();
//改动处
Stringsql="select*"+
"fromview_bookwherebarcode=?
";
//
java.sql.PreparedStatementpst=conn.prepareStatement(sql);
pst.setString(1,barcode);
java.sql.ResultSetrs=pst.executeQuery();
if(rs.next()){
BeanBookb=newBeanBook();
b.setBarcode(rs.getString
(1));
b.setBookname(rs.getString
(2));
b.setPubid(rs.getString(3));
b.setPrice(rs.getDouble(4));
b.setState(rs.getString(5));
b.setPubName(rs.getString(6));
returnb;
}
}catch(SQLExceptione){
e.printStackTrace();
thrownewDbException(e);
}
finally{
if(conn!
=null)
try{
conn.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
returnnull;
}
3、设计读者借阅情况统计视图view_reader_static,并在BookLendManager类中添加根据读者ID提取其借阅数量的代码。
第一步:
通过查询分析器建立读者统计视图,要求视图中包含读者ID、读者姓名、借阅数量;
第二步:
在BookLendManager中添加方法publicintloadReaderLendCount(Stringreaderid)throwsDbException。
并编写其代码
第三步:
在BookLendManager类中添加main函数,并编写上述方法的测试代码。
进行功能的测试
【实验结果与分析】
A、写出视图创建代码。
createviewview_reader_static
as
selectr.readerid,r.readerName,count(*)AS借阅数量fromBeanReaderr,BeanBookLendRecordrc
wherer.readerid=rc.readeridgroupbyr.readerid,r.readerName
B、给出改造后BookLendManager类的各个方法的代码。
publicstaticintloadReaderLendCount(Stringreaderid)throwsDbException{
Connectionconn=null;
inta=0;
try{
conn=DBUtil.getConnection();
Stringsql="select*fromview_reader_staticwherereaderid=?
";
java.sql.PreparedStatementpst=conn.prepareStatement(sql);
pst.setString(1,readerid);
java.sql.ResultSetrs=pst.executeQuery();
if(rs.next()){
a=rs.getInt(3);
}
}catch(SQLExceptione){
e.printStackTrace();
thrownewDbException(e);
}
finally{
if(conn!
=null)
try{
conn.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
returna;
}
4、索引实验:
第一步:
完成IndexTest_initData类中的代码,并测试。
第二步:
完成IndexTest类中的代码,并测试,记录执行结果
第三步:
通过查询分析器,在BeanBookLendRecord表的readerid上建立索引
第四步:
再次执行IndexTest类,记录执行结果
A、给出两个类的代码和索引建立的代码
B、比较IndexTest类两次执行的结果,并说明索引的作用。
并思考:
如果我们需要经常查询某用户近期借阅的n本图书,请问,应该如何建立索引?
【提示:
多列索引】
5、批量处理:
第一步:
在PublisherManager中,增加方法
publicvoidcreate1000Publisher1()throwsBaseException
用pareparedStatement添加1000个出版社。
第二步:
在PublisherManager中,增加方法
publicvoidcreate1000Publisher2()throwsBaseException
用pareparedStatement,以及批量处理的方式添加1000个出版社。
第三步:
在PublisherManager的main函数中分别依次调用这两个方法,并输出两个方法的耗时。
(耗时计算,请参考讲义中的批量处理例子)