数据库系统应用与开发实验七资料讲解.docx
《数据库系统应用与开发实验七资料讲解.docx》由会员分享,可在线阅读,更多相关《数据库系统应用与开发实验七资料讲解.docx(16页珍藏版)》请在冰豆网上搜索。
数据库系统应用与开发实验七资料讲解
数据库系统应用与开发--实验七
实验JDBC进阶(3)
一、相关知识点
1、JDBC基本概念
2、主从关系,分页查询
二、实验目的:
理解分页查询的概念和处理方法
三、实验内容:
数据准备:
用上次实验中的方法,生成1000个读者和图书;
1、改造读者模块,在提取读者的同时,提取其未归还的图书信息
第一步:
通过程序增加一些借阅纪录
第二步:
改造读者javabean,使之包括借阅的图书信息
第三步:
改造读者提取方法,同时提取未归还图书;
第四步:
修改图书借阅ui类并进行测试
【实验结果与分析】
A、javabean类代码。
privateListbeanBook;
publicListgetBeanBook(){
returnbeanBook;
}
publicvoidsetBeanBook(ListbeanBook){
this.beanBook=beanBook;
B、给出改造后ReaderManager类的方法代码。
Listresult1=newArrayList();
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.Listt2=readers.get(i).getBeanBook();
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;privateListbeanReader;用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());//赋值总页面数Listresult1=newArrayList();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));Listresult2=newArrayList();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-generatedcatchblocke.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当按下上一页或下一页按钮时对当前页值进行修改再刷新tableelseif(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();}如图:测试:第一页:当按下下一页后:当按下上一页后:
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;
privateListbeanReader;
用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());//赋值总页面数
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";
"".equals(keyword)){
pst1.setString(1,"%"+keyword+"%");
pst1.setString(2,"%"+keyword+"%");
while(rs1.next()){
BeanReaderr=newBeanReader();
r.setReaderid(rs1.getString
r.setReaderName(rs1.getString
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));
Listresult2=newArrayList();
Stringsql2="selecta.barcode,a.bookname,a.pubid,a.price,a.statefrombeanbooka,beanbooklendrecordbwhereb.readerid='"+rs1.getString
java.sql.PreparedStatementpst2=conn.prepareStatement(sql2);
java.sql.ResultSetrs2=pst2.executeQuery();
while(rs2.next())
b.setBarcode(rs2.getString
b.setBookname(rs2.getString
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!
conn.close();
//TODOAuto-generatedcatchblock
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();}如图:测试:第一页:当按下下一页后:当按下上一页后:
page.setPageRecordCount(page.getPageRecordCount()+1);
第一页:
当按下下一页后:
当按下上一页后:
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1