1、实验JDBC 进阶( 3)一、相关知识点1、 JDBC基本概念2、主从关系,分页查询二、实验目的:理解分页查询的概念和处理方法三、实验容:数据准备:用上次实验中的方法,生成1000 个读者和图书;1、 改造读者模块,在提取读者的同时,提取其未归还的图书信息第一步:通过程序增加一些借阅纪录第二步:改造读者javabean ,使之包括借阅的图书信息第三步:改造读者提取方法,同时提取未归还图书;第四步:修改图书借阅ui 类并进行测试【实验结果与分析】A、javabean 类代码。privateListbeanBook ;publicList getBeanBook() returnbeanBook
2、 ;publicvoidsetBeanBook(List beanBook) this . beanBook = beanBook;B、给出改造后ReaderManager 类的方法代码。List result1=new ArrayList();.专业资料 .String sql1=select a.barcode,a.bookname,a.pubid,a.price,a.statefrom beanbook a ,beanbooklendrecord b where b.readerid=+rs.getString(1)+ andb.bookBarcode=a.barcode and b.r
3、eturnDate is null;while (rs1.next()BeanBook b= new BeanBook();b.setBarcode(rs1.getString(1);b.setBookname(rs1.getString(2);b.setPubid(rs1.getString(3);b.setPrice(rs1.getFloat(4);b.setState(rs1.getString(5);result1.add(b);r.setBeanBook(result1);result.add(r);在图书管理系统借几本书.专业资料 .修改 ui 类的地方:1 private Obj
4、ect tblTitle = 读者证号 , , 类别 , 借阅限额 , 状态 , 未归还图书信息 ;2 tblData= new Objectreaders .size()6;3 List t2 =readers .get(i).getBeanBook();String imf= ;if (t2!= null)for ( intj=0;jt2.size();j+)imf=imf+ 条形码 : +t2.get(j).getBarcode()+书名: +t2.get(j).getBookname()+产商 id:+t2.get(j).getPubid()+价格 +t2.get(j).getPric
5、e()+状况 : +t2.get(j).getState();tblDatai5=imf;测试:.专业资料 .2、 改造读者管理模块,将读者列表页面改造成分页查询方式。第一步:第二步:自行设计PageData 类,用于存放分页数据第三步:改造ReaderManager 类,将其中的查询读者方法改造成分页查询。第四步:修改ui 类,增加上一页、下一页按钮,实现读者的分页查询,要求每页20 人【实验结果与分析】A. PageData 类代码。publicclass PageData privateinttotalRecordCount;privateintpageCount;privateintp
6、agesize ;privateintpageRecordCount;privateListbeanReader;用 set 与 get 创建方法.专业资料 .B. 给出改造后 ReaderManager 类的方法代码。publicPageData searchReaderPage(String keyword,intreaderTypeId,PageData page)throws BaseException/ 加一个 page类Connection conn= null ;tryconn=DBUtil. getConnection ();Stringsql= selectcount(*)f
7、rom BeanReader r,BeanReaderTypert where r.readerTypeId=rt.readerTypeId+ and removeDate is null ;/这个 sql 是为了记录总记录数if (rs.next()page.setTotalRecordCount(rs.getInt(1);/ 赋值总记录数page.setPageCount(page.getTotalRecordCount()/page.getPagesize();/ 赋值总页面数List result1=new ArrayList();String sql1=select top +pag
8、e.getPagesize()+readerid,readerName,r.readerTypeId,r.lendBookLimitted,createDate,creatorUserId,stopDate,stopUserId,rt.readerTypeName+ from BeanReader r,BeanReaderType rt wherer.readerTypeId=rt.readerTypeId+ and removeDate is null ;if (page.getPageRecordCount()!=1)sql1+= and readerid not in (select t
9、op.专业资料 . +(page.getPageRecordCount()-1)*(page.getPagesize()+ readerid fromBeanReader where removeDate is null);if (readerTypeId0) sql1+= andr.readerTypeId=+readerTypeId;if (keyword!= null& ! .equals(keyword)sql1+= and (readerid like ? or readerName like ?);sql1+= order by readerid;pst1=conn.prepare
10、Statement(sql1);if (keyword!= null& ! .equals(keyword)pst1.setString(1,%+keyword+%);pst1.setString(2,%+keyword+%);while (rs1.next()BeanReader r= new BeanReader();r.setReaderid(rs1.getString(1);r.setReaderName(rs1.getString(2);r.setReaderTypeId(rs1.getInt(3);r.setLendBookLimitted(rs1.getInt(4);r.setC
11、reateDate(rs1.getDate(5);r.setCreatorUserId(rs1.getString(6);r.setStopDate(rs1.getDate(7);r.setStopUserId(rs1.getString(8);r.setReaderTypeName(rs1.getString(9);List result2=new ArrayList();String sql2=selecta.barcode,a.bookname,a.pubid,a.price,a.state from beanbooka ,beanbooklendrecord b where b.rea
12、derid=+rs1.getString(1)+ andb.bookBarcode=a.barcode and b.returnDate is null;pst2=conn.prepareStatement(sql2);while (rs2.next()BeanBook b=new BeanBook();b.setBarcode(rs2.getString(1);b.setBookname(rs2.getString(2);b.setPubid(rs2.getString(3);b.setPrice(rs2.getFloat(4);b.setState(rs2.getString(5);.专业
13、资料 .result2.add(b);r.setBeanBook(result2);result1.add(r);page.setBeanReader(result1); catch (SQLException e) e.printStackTrace(); throw new DbException(e);finallyif (conn!= null )try conn.close(); catch (SQLException e) / TODOAuto-generated catch blocke.printStackTrace();returnpage;给出 ui 类中的修改部分(注:生
14、成表格的方法需做微调)1 .首先增加2 个按钮即上一页,和下一页需要修改3 个地方第一个是:private Button previous = new Button( 上一页 ); private Button next = new Button( 下一页 );如图:第二个是:toolBar .add( previous );toolBar .add( next );.专业资料 .如图:第三个是:增加监听器this . previous .addActionListener(this );this . next .addActionListener(this );2. 对 page 类的一些值
15、进行复制page.setPageRecordCount(1); / 初始化当前的数是第一页 page.setPagesize(20); / 以20个记录为一页.专业资料 .注意一定要加中括号 不然会冒错 我也不知道为什么如图:有些值在 ReaderManager 类的 searchReaderPage方法中已经赋值了如图:3. 对刷新 table 的方法进行修改readers =( newReaderManager().searchReaderPage(this . edtKeyword.getText(),rtId,page).getBeanReader();注意需要在: BeanReade
16、rType类中加 privatePageData page; 变量 顺便加下 set 与get 的方法。不然 BeanReaderTypert= this . readerTypeMap_name.get(rtname); 这句话会冒错说 searchReaderPage 方法有 3个形参而 readerType 什么只有 2个形参不行 我也不是很懂4. 最后在 actionPerformed方法中加 2个if当按下上一页或下一页按钮时对.专业资料 .当前页值进行修改再刷新 tableelseif (e.getSource()=this . previous )if ( page.getPag
17、eRecordCount()1)page.setPageRecordCount( page.getPageRecordCount()-1);this .reloadTable();elseif (e.getSource()=this . next )if ( page.getPageRecordCount() page.getTotalRecordCount()page.setPageRecordCount( page.getPageRecordCount()+1);this .reloadTable();如图:测试:第一页:.专业资料 .当按下下一页后:.专业资料 .当按下上一页后:.专业资料 .专业资料 .