数据库系统应用与开发实验七.docx
- 文档编号:5214783
- 上传时间:2022-12-14
- 格式:DOCX
- 页数:15
- 大小:762.58KB
数据库系统应用与开发实验七.docx
《数据库系统应用与开发实验七.docx》由会员分享,可在线阅读,更多相关《数据库系统应用与开发实验七.docx(15页珍藏版)》请在冰豆网上搜索。
数据库系统应用与开发实验七
实验JDBC进阶(3)
一、相关知识点
1、JDBC基本概念
2、主从关系,分页查询
二、实验目的:
理解分页查询的概念和处理方法
三、实验内容:
数据准备:
用上次实验中的方法,生成1000个读者和图书;
1、改造读者模块,在提取读者的同时,提取其未归还的图书信息
第一步:
通过程序增加一些借阅纪录
第二步:
改造读者javabean,使之包括借阅的图书信息
第三步:
改造读者提取方法,同时提取未归还图书;
第四步:
修改图书借阅ui类并进行测试
【实验结果与分析】
A、javabean类代码。
privateList
publicList
returnbeanBook;
}
publicvoidsetBeanBook(List
this.beanBook=beanBook;
}
B、给出改造后ReaderManager类的方法代码。
List
Stringsql1="selecta.barcode,a.bookname,a.pubid,a.price,a.statefrombeanbooka,beanbooklendrecordbwhereb.readerid='"+rs.getString
(1)+"'andb.bookBarcode=a.barcodeandb.returnDateisnull";
java.sql.PreparedStatementpst1=conn.prepareStatement(sql1);
java.sql.ResultSetrs1=pst1.executeQuery();
while(rs1.next())
{
BeanBookb=newBeanBook();
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.privateObjecttblTitle[]={"读者证号","姓名","类别","借阅限额","状态","未归还图书信息"};
2.tblData=newObject[readers.size()][6];
3.List
Stringimf="";
if(t2!
=null)
{
for(intj=0;j { imf=imf+"条形码: "+t2.get(j).getBarcode()+"书名: "+t2.get(j).getBookname()+ "产商id: "+t2.get(j).getPubid()+"价格"+t2.get(j).getPrice()+"状况: "+t2.get(j).getState(); } } tblData[i][5]=imf; 测试: 2、改造读者管理模块,将读者列表页面改造成分页查询方式。 第一步: 第二步: 自行设计PageData类,用于存放分页数据 第三步: 改造ReaderManager类,将其中的查询读者方法改造成分页查询。 第四步: 修改ui类,增加上一页、下一页按钮,实现读者的分页查询,要求每页20人 【实验结果与分析】 A.PageData类代码。 publicclassPageData{ privateinttotalRecordCount; privateintpageCount; privateintpagesize; privateintpageRecordCount; privateList 用set与get创建方法 B.给出改造后ReaderManager类的方法代码。 publicPageDatasearchReaderPage(Stringkeyword,intreaderTypeId,PageDatapage)throwsBaseException{ //加一个page类 Connectionconn=null; try{ conn=DBUtil.getConnection(); Stringsql="selectcount(*)fromBeanReaderr,BeanReaderTypertwherer.readerTypeId=rt.readerTypeId"+ "andremoveDateisnull";//这个sql是为了记录总记录数 java.sql.PreparedStatementpst=conn.prepareStatement(sql); java.sql.ResultSetrs=pst.executeQuery(); if(rs.next()) page.setTotalRecordCount(rs.getInt (1));//赋值总记录数 page.setPageCount(page.getTotalRecordCount()/page.getPagesize());//赋值总页面数 List Stringsql1="selecttop"+page.getPagesize()+"readerid,readerName,r.readerTypeId,r.lendBookLimitted,createDate,creatorUserId,stopDate,stopUserId,rt.readerTypeName"+ "fromBeanReaderr,BeanReaderTypertwherer.readerTypeId=rt.readerTypeId"+ "andremoveDateisnull"; if(page.getPageRecordCount()! =1) sql1+="andreaderidnotin(selecttop"+(page.getPageRecordCount()-1)*(page.getPagesize())+"readeridfromBeanReaderwhereremoveDateisnull)"; if(readerTypeId>0)sql1+="andr.readerTypeId="+readerTypeId; if(keyword! =null&&! "".equals(keyword)) sql1+="and(readeridlike? orreaderNamelike? )"; sql1+="orderbyreaderid"; java.sql.PreparedStatementpst1=conn.prepareStatement(sql1); if(keyword! =null&&! "".equals(keyword)){ pst1.setString(1,"%"+keyword+"%"); pst1.setString(2,"%"+keyword+"%"); } java.sql.ResultSetrs1=pst1.executeQuery(); while(rs1.next()){ BeanReaderr=newBeanReader(); 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)); r.setCreatorUserId(rs1.getString(6)); r.setStopDate(rs1.getDate(7)); r.setStopUserId(rs1.getString(8)); r.setReaderTypeName(rs1.getString(9)); List Stringsql2="selecta.barcode,a.bookname,a.pubid,a.price,a.statefrombeanbooka,beanbooklendrecordbwhereb.readerid='"+rs1.getString (1)+"'andb.bookBarcode=a.barcodeandb.returnDateisnull"; java.sql.PreparedStatementpst2=conn.prepareStatement(sql2); java.sql.ResultSetrs2=pst2.executeQuery(); while(rs2.next()) { BeanBookb=newBeanBook(); 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)); result2.add(b); } r.setBeanBook(result2); result1.add(r); } page.setBeanReader(result1); }catch(SQLExceptione){ e.printStackTrace(); thrownewDbException(e); } finally{ if(conn! =null) try{ conn.close(); }catch(SQLExceptione){ //TODOAuto-generatedcatchblock e.printStackTrace(); } } returnpage; } 给出ui类中的修改部分(注: 生成表格的方法需做微调) 1.首先增加2个按钮即上一页,和下一页 需要修改3个地方 第一个是: privateButtonprevious=newButton("上一页"); privateButtonnext=newButton("下一页"); 如图: 第二个是: toolBar.add(previous); toolBar.add(next); 如图: 第三个是: 增加监听器 this.previous.addActionListener(this); this.next.addActionListener(this); 2.对page类的一些值进行复制 { page.setPageRecordCount (1);//初始化当前的数是第一页 page.setPagesize(20);//以20个记录为一页 } 注意一定要加中括号不然会冒错我也不知道为什么 如图: 有些值在ReaderManager类的searchReaderPage方法中已经赋值了 如图: 3.对刷新table的方法进行修改 readers=(newReaderManager()).searchReaderPage(this.edtKeyword.getText(),rtId,page).getBeanReader(); 注意需要在: BeanReaderType类中加privatePageDatapage;变量顺便加下set与get的方法。 不然BeanReaderTypert=this.readerTypeMap_name.get(rtname);这句话会冒错说searchReaderPage方法有3个形参而readerType什么只有2个形参不行我也不是很懂 4.最后在actionPerformed方法中加2个if当按下上一页或下一页按钮时对当前页值进行修改再刷新table elseif(e.getSource()==this.previous){ if(page.getPageRecordCount()>1){ page.setPageRecordCount(page.getPageRecordCount()-1); this.reloadTable(); } } elseif(e.getSource()==this.next){ if(page.getPageRecordCount() page.setPageRecordCount(page.getPageRecordCount()+1); this.reloadTable(); } 如图: 测试: 第一页: 当按下下一页后: 当按下上一页后:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数据库 系统 应用 开发 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)