1、数据库系统应用与开发实验七实验 JDBC进阶(3)一、相关知识点 1、JDBC基本概念 2、主从关系,分页查询二、实验目的: 理解分页查询的概念和处理方法三、实验内容: 数据准备:用上次实验中的方法,生成1000个读者和图书;E、改造读者模块,在提取读者的同时,提取其未归还的图书信息第一步:通过程序增加一些借阅纪录第二步:改造读者javabean,使之包括借阅的图书信息第三步:改造读者提取方法,同时提取未归还图书;第四步:修改图书借阅ui类并进行测试【实验结果与分析】E、javabean类代码。private List beanBook; public List getBeanBook() r
2、eturn beanBook; public void setBeanBook(List beanBook) this.beanBook = beanBook; F、给出改造后ReaderManager类的方法代码。List result1=new ArrayList(); String sql1=select a.barcode,a.bookname,a.pubid,a.price,a.state from beanbook a ,beanbooklendrecord b where b.readerid=+rs.getString(1)+ and b.bookBarcode=a.barco
3、de and b.returnDate is null; java.sql.PreparedStatement pst1=conn.prepareStatement(sql1); java.sql.ResultSet rs1=pst1.executeQuery(); 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.
4、setState(rs1.getString(5); result1.add(b); r.setBeanBook(result1); result.add(r);在图书管理系统借几本书修改ui类的地方:1private Object tblTitle=读者证号,姓名,类别,借阅限额,状态,未归还图书信息;2tblData =new Objectreaders.size()6;3List t2 = readers.get(i).getBeanBook(); String imf=; if(t2!=null) for(int j=0;jt2.size();j+) imf=imf+条形码:+t2.g
5、et(j).getBarcode()+ 书名:+t2.get(j).getBookname()+ 产商id:+t2.get(j).getPubid()+ 价格+t2.get(j).getPrice()+ 状况:+t2.get(j).getState(); tblDatai5=imf;测试:F、改造读者管理模块,将读者列表页面改造成分页查询方式。第一步: 第二步:自行设计PageData类,用于存放分页数据第三步:改造ReaderManager类,将其中的查询读者方法改造成分页查询。第四步:修改ui类,增加上一页、下一页按钮,实现读者的分页查询,要求每页20人【实验结果与分析】E. PageDa
6、ta类代码。public class PageData private int totalRecordCount; private int pageCount; private int pagesize; private int pageRecordCount;private List beanReader; 用set与get创建方法B. 给出改造后ReaderManager类的方法代码。public PageData searchReaderPage(String keyword,int readerTypeId,PageData page)throws BaseException /加一个
7、page类 Connection conn=null; try conn=DBUtil.getConnection(); String sql=select count(*) from BeanReader r,BeanReaderType rt where r.readerTypeId=rt.readerTypeId + and removeDate is null ; / 这个sql是为了记录总记录数 java.sql.PreparedStatement pst=conn.prepareStatement(sql); java.sql.ResultSet rs=pst.executeQue
8、ry(); if(rs.next() page.setTotalRecordCount(rs.getInt(1); /赋值总记录数 page.setPageCount(page.getTotalRecordCount()/page.getPagesize(); /赋值总页面数 List result1=new ArrayList(); String sql1=select top +page.getPagesize()+ readerid,readerName,r.readerTypeId,r.lendBookLimitted,createDate,creatorUserId,stopDate
9、,stopUserId,rt.readerTypeName + from BeanReader r,BeanReaderType rt where r.readerTypeId=rt.readerTypeId + and removeDate is null ; if(page.getPageRecordCount()!=1) sql1+= and readerid not in (select top +(page.getPageRecordCount()-1)*(page.getPagesize()+ readerid from BeanReader where removeDate is
10、 null); if(readerTypeId0) sql1+= and r.readerTypeId=+readerTypeId; if(keyword!=null & !.equals(keyword) sql1+= and (readerid like ? or readerName like ?); sql1+= order by readerid; java.sql.PreparedStatement pst1=conn.prepareStatement(sql1); if(keyword!=null & !.equals(keyword) pst1.setString(1, %+k
11、eyword+%); pst1.setString(2, %+keyword+%); java.sql.ResultSet rs1=pst1.executeQuery(); 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.setCreateDate(rs1.getDate(5
12、); 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=select a.barcode,a.bookname,a.pubid,a.price,a.state from beanbook a ,beanbooklendrecord b where b.readerid=+rs1.getS
13、tring(1)+ and b.bookBarcode=a.barcode and b.returnDate is null; java.sql.PreparedStatement pst2=conn.prepareStatement(sql2); java.sql.ResultSet rs2=pst2.executeQuery(); while(rs2.next() BeanBook b=new BeanBook(); b.setBarcode(rs2.getString(1); b.setBookname(rs2.getString(2); b.setPubid(rs2.getString
14、(3); b.setPrice(rs2.getFloat(4); b.setState(rs2.getString(5); result2.add(b); r.setBeanBook(result2); result1.add(r); page.setBeanReader(result1); catch (SQLException e) e.printStackTrace(); throw new DbException(e); finally if(conn!=null) try conn.close(); catch (SQLException e) / TODO Auto-generat
15、ed catch block e.printStackTrace(); return page; 给出ui类中的修改部分(注:生成表格的方法需做微调)1 . 首先增加2个按钮 即上一页,和下一页 需要修改3个地方第一个是: private Button previous = new Button(上一页); private Button next = new Button(下一页);如图:第二个是: toolBar.add(previous); toolBar.add(next);如图:第三个是:增加监听器this.previous.addActionListener(this); this.
16、next.addActionListener(this);2.对page类的一些值进行复制 page.setPageRecordCount(1);/初始化当前的数是第一页 page.setPagesize(20);/以20个记录为一页注意一定要加中括号 不然会冒错 我也不知道为什么如图:有些值在ReaderManager类的searchReaderPage方法中已经赋值了如图:3.对刷新table的方法进行修改readers=(new ReaderManager().searchReaderPage(this.edtKeyword.getText(), rtId,page).getBeanRe
17、ader();注意需要在:BeanReaderType类中加private PageData page;变量 顺便加下set与get的方法。不然BeanReaderType rt=this.readerTypeMap_name.get(rtname);这句话会冒错说searchReaderPage方法有3个形参而readerType什么只有2个形参不行 我也不是很懂4.最后在actionPerformed方法中加2个if 当按下上一页或下一页按钮时对当前页值进行修改 再刷新tableelse if(e.getSource()=this.previous) if(page.getPageRecordCount()1) page.setPageRecordCount(page.getPageRecordCount()-1); this.reloadTable(); else if(e.getSource()=this.next) if(page.getPageRecordCount()page.getTotalRecordCount() page.setPageRecordCount(page.getPageRecordCount()+1); this.reloadTable(); 如图:测试:第一页:当按下下一页后:当按下上一页后:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1