1、数据库系统应用与开发实验六实验 JDBC进阶2一、相关知识点 1、JDBC根本概念 2、视图、索引二、实验目的: 理解视图和索引的概念,并通过视图设计简化程序设计,通过索引设计优化查询性能三、实验容:1、设计读者视图view_reader,并修改readerManager类中相关代码。第一步:通过查询分析器建立读者视图,要求视图中包含读者类别名称;第二步:改造ReaderManager类,将其中的连接查询用视图代替。第三步:运行图书管理系统,进展各个功能的测试读者类别管理、读者管理【实验结果与分析】A、写出视图创建代码。create view view_reader asselect read
2、erid,readerName,r.readerTypeId,r.lendBookLimitted,createDate,creatorUserId,stopDate,stopUserId,rt.readerTypeName,r.removeDate from BeanReader r,BeanReaderType rt where r.readerTypeId=rt.readerTypeIdB、给出改造后ReaderManager类的各个方法的代码。String sql=select * + from view_reader where removeDate is null + and re
3、moveDate is null ;String sql=select * + from view_reader where readerid=?;2、设计图书视图view_book,并修改BookManager类中相关代码。第一步:通过查询分析器建立图书视图,要求视图中包含名称;第二步:改造BookManager类,将其中的连接查询用视图代替。第三步:运行图书管理系统,进展各个功能的测试【实验结果与分析】A、写出视图创建代码。create view view_bookasselect b.barcode,b.bookname,b.pubid,b.price,b.state,p.publish
4、ername from beanbook b,beanpublisher p where b.pubid=p.pubidB、给出改造后ReaderManager类的各个方法的代码。publicclass BookManager public List searchBook(String keyword,String bookState)throws BaseException List result=new ArrayList(); Connection conn=null;try conn=DBUtil.getConnection();/改动处 String sql=select * + f
5、rom view_book where state=+bookState+ ;/if(keyword!=null & !.equals(keyword) sql+= and (b.bookname like ? or b.barcode like ?); sql+= order by b.barcode; java.sql.PreparedStatement pst=conn.prepareStatement(sql);if(keyword!=null & !.equals(keyword) pst.setString(1, %+keyword+%); pst.setString(2, %+k
6、eyword+%); java.sql.ResultSet rs=pst.executeQuery();while(rs.next() BeanBook b=new BeanBook(); 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 (SQLExcep
7、tion e) e.printStackTrace();thrownew DbException(e); finallyif(conn!=null)try conn.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); return result; public BeanBook loadBook(String barcode) throws DbException Connection conn=null;try conn=DBUtil.getConnection();/改
8、动处 String sql=select * + from view_book where barcode=? ;/ java.sql.PreparedStatement pst=conn.prepareStatement(sql); pst.setString(1,barcode); java.sql.ResultSet rs=pst.executeQuery();if(rs.next() BeanBook b=new BeanBook(); b.setBarcode(rs.getString(1); b.setBookname(rs.getString(2); b.setPubid(rs.
9、getString(3); b.setPrice(rs.getDouble(4); b.setState(rs.getString(5); b.setPubName(rs.getString(6);return b; catch (SQLException e) e.printStackTrace();thrownew DbException(e); finallyif(conn!=null)try conn.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); return
10、null; 3、设计读者借阅情况统计视图view_reader_static,并在BookLendManager类中添加根据读者ID提取其借阅数量的代码。第一步:通过查询分析器建立读者统计视图,要求视图中包含读者ID、读者、借阅数量;第二步:在BookLendManager中添加方法 public int loadReaderLendCount(String readerid) throws DbException。并编写其代码第三步:在BookLendManager类中添加main函数,并编写上述方法的测试代码。进展功能的测试【实验结果与分析】A、写出视图创建代码。create view v
11、iew_reader_staticasselect r.readerid,r.readerName,count(*) AS借阅数量 from BeanReader r,BeanBookLendRecord rcwhere r.readerid=rc.readerid group by r.readerid,r.readerNameB、给出改造后BookLendManager类的各个方法的代码。publicstaticint loadReaderLendCount(String readerid) throws DbException Connection conn=null;int a=0;t
12、ry conn=DBUtil.getConnection(); String sql=select * from view_reader_static where readerid=?; java.sql.PreparedStatement pst=conn.prepareStatement(sql); pst.setString(1, readerid); java.sql.ResultSet rs=pst.executeQuery();if(rs.next() a=rs.getInt(3); catch (SQLException e) e.printStackTrace();thrown
13、ew DbException(e); finallyif(conn!=null)try conn.close(); catch (SQLException e) / TODO Auto-generated catch block e.printStackTrace(); return a; 4、索引实验:第一步:完成IndexTest_initData类中的代码,并测试。第二步:完成IndexTest类中的代码,并测试,记录执行结果第三步:通过查询分析器,在BeanBookLendRecord表的readerid上建立索引第四步:再次执行IndexTest类,记录执行结果A、给出两个类的代码和索引建立的代码B、比拟IndexTest类两次执行的结果,并说明索引的作用。并思考:如果我们需要经常查询某用户近期借阅的n本图书,请问,应该如何建立索引?【提示:多列索引】