Web数据库学生实验报告版.docx
- 文档编号:6166890
- 上传时间:2023-01-04
- 格式:DOCX
- 页数:31
- 大小:84.19KB
Web数据库学生实验报告版.docx
《Web数据库学生实验报告版.docx》由会员分享,可在线阅读,更多相关《Web数据库学生实验报告版.docx(31页珍藏版)》请在冰豆网上搜索。
Web数据库学生实验报告版
Web数据库技术
教师实验指导手册及评分标准
院系:
信息科学与技术学院
专业:
信息管理与信息系统
班级:
信A1321/22
任课教师:
张海
实验报告
(一)
院系:
信息学院课程名称:
Web数据库技术日期:
班级
姓名
专业
学号
实验室
实验名称
Jdbc应用
成绩评定
教师签名
实验目的
1、掌握数据库驱动的加载方式
2、掌握connection对象的使用方法
3、掌握statement对象使用方法
4、掌握事务的处理机制
5、掌握数据持久层的设计
实验内容
connection对象、statement对象等应用
1、请设计一个工程类通过配置文件如下db.properties来获得数据库连接的相关信息,并通过该配置文件获得数据库连接对象。
(20分)
db.properties
driver=org.gjt.mm.mysql.Driver
url=jdbc\:
mysql\:
//127.0.0.1/\u5B66\u751F\u5E93
userName=admin
pwd=admin
publicclassconnectionFactory{
publicstaticConnectiongetConnection()throwsSQLException{
}
}
请把getConnection()方法补全。
要求设计合理规范,必须有截图。
答案:
}
2、已知学生定义如下:
publicclassstudent{
privateintid;
privateStringstuId;
privateStringname;
privateStringdomCard;//楼栋宿舍号“31-507”
privateStringbedNo;//床铺号
publicstudent(StringstuId,Stringname,StringdomCard,StringbedNo){
super();
this.stuId=stuId;
this.name=name;
this.domCard=domCard;
this.bedNo=bedNo;
}
publicStringtoString(){
return"id="+id+";学号="+stuId+”;姓名=”+name+”;宿舍号=”+domCard+”;床铺号=”+bedNo;
}
//相应get、set方法省略
}
有一
classstudentDatas{
publicstaticArrayList
static{
studentstu=newstudent("会计A001121","张三","31栋908",1);
students.add(stu);
stu=newstudent("会计A001166","李四","31栋908",2);
students.add(stu);
stu=newstudent("会计A001177","王五","31栋807",4);
students.add(stu);
}
}
现要求
(1)根据student类建立一个学生表用来保存student类的相关属性。
(2)通过jdbc,将studentDatas的students集合中的所有学生保持到学生表中;
(3)通过jdbc,将学生表中所有的宿舍是”31栋908”学生全部调整到“20栋371”宿舍;
(4)通过jdbc,删除"31栋807"床铺号是4的学生。
20分
3、ResultSet对象操作
请将上题中宿舍号最后一位是”8”的学生信息全部显示出来。
4、请用perparedStatement对象保存如下:
studentstu=newstudent("信息A110099","刘六","31栋818",8);
student对象的实例stu到数据中。
兴趣题:
1、分页功能的实现原理
方法一:
JDBC实现
用JDBC从ResultSet中取出一个指定范围(offset,span)的数据,可以采用这样的方法。
PrepareStatementps=con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ps.setMaxRows(offsetspan);//最终读到第几条
rs=ps.executeQuery();
rs.absolute(offset);//定位到每页的开始记录处
while(rs.next())
//conn.prepareStatement(sql,游标类型,能否更新记录);
//游标类型:
//ResultSet.TYPE_FORWORD_ONLY:
只进游标
//ResultSet.TYPE_SCROLL_INSENSITIVE:
可滚动。
但是不受其他用户对数据库更改的影响。
//ResultSet.TYPE_SCROLL_SENSITIVE:
可滚动。
当其他用户更改数据库时这个记录也会改变。
//能否更新记录:
//ResultSet.CONCUR_READ_ONLY,只读
//ResultSet.CONCUR_UPDATABLE,可更新
方法二:
数据库的sql语言实现
Mysql的limitSQL为
Select*frommessagewhereforum_id=?
andcreated_time>?
orderbycreated_timedesclimit?
?
后面的两个limit?
?
分别为offset,span。
Oracle的limitSQL为
select*from(selectrow_.*,rownumrownum_from(Select*frommessagewhereforum_id=?
andcreated_time>?
orderbycreated_timedesc)row_whererownum<=?
)whererownum_>?
后面的两个limit?
?
分别为offsetspan,offset。
2、请执行在mysql中执行insertinto宿舍表(学号,姓名,宿舍,床铺)values(‘会计A001121’,’张三’,’24栋908’,1)两次。
请通过JDBC将宿舍表中学号重复的记录去掉,只保留其中的一条。
5、事务处理
请先在mysql中运行如下语句:
CREATETABLE`账户表`(
`账户名`varchar(10)NOTNULLDEFAULT'',
`金额`doubleDEFAULTNULL,
PRIMARYKEY(`账户名`)
)ENGINE=InnoDBDEFAULTCHARSET=utf8;
------------------------------
--Recordsof账户表
------------------------------
INSERTINTO账户表VALUES('张三','100');
INSERTINTO账户表VALUES('李四','200');
INSERTINTO账户表VALUES('王五','50');
请运行如下程序查看结果
(1)程序1:
publicclasstrans1{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Connectionconn1=null;
Statementstmn1=null;
try{
conn1=connectionFactory.getConnection();
conn1.setAutoCommit(true);
stmn1=conn1.createStatement();
stmn1.executeUpdate("update账户表set金额=金额+5where账户名='张三'");
System.out.println("update语句执行");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
if(stmn1!
=null)
try{
stmn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
if(conn1!
=null)
try{
conn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
(2)程序2:
publicclasstrans2{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Connectionconn1=null;
Statementstmn1=null;
try{
conn1=connectionFactory.getConnection();
conn1.setAutoCommit(false);
stmn1=conn1.createStatement();
stmn1.executeUpdate("update账户表set金额=金额+5where账户名='张三'");
System.out.println("update语句执行");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
if(stmn1!
=null)
try{
stmn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
if(conn1!
=null)
try{
conn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
请查询数据库记录内容。
(3)完整事务程序3:
publicclasstrans2{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Connectionconn1=null;
Statementstmn1=null;
try{
conn1=connectionFactory.getConnection();
conn1.setAutoCommit(false);
stmn1=conn1.createStatement();
stmn1.executeUpdate("update账户表set金额=金额+5where账户名='张三'");
mit();
System.out.println("insert语句执行");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
try{
conn1.rollback();
}catch(SQLExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}finally{
if(stmn1!
=null)
try{
stmn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
if(conn1!
=null)
try{
conn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
如果需要将下面"update"及"insert"作为一个事务来整体提交,请问下面代码如果改?
publicclasstrans3{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
Connectionconn1=null;
Connectionconn2=null;
Statementstmn1=null;
Statementstmn2=null;
try{
conn1=connectionFactory.getConnection();
conn2=connectionFactory.getConnection();
stmn1=conn1.createStatement();
stmn1.executeUpdate("update账户表set金额=金额+5where账户名='张三'");
System.out.println("update语句执行");
stmn2=conn2.createStatement();
stmn2.executeUpdate("INSERTINTO账户表VALUES('张三','500')");
System.out.println("insert语句执行");
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}finally{
if(stmn1!
=null)
try{
stmn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
if(stmn2!
=null)
try{
stmn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
if(conn1!
=null)
try{
conn1.close();
}catch(SQLExceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
已知有线程类定义如下:
importjava.sql.Connection;
importjava.sql.SQLException;
importjava.sql.Statement;
importjava.util.Date;
publicclassclientThreadextendsThread{
privateStringsql=null;
privateintwait=4000;
publicStringgetSql(){
returnsql;
}
publicvoidsetSql(Stringsql){
this.sql=sql;
}
publicintgetWait(){
returnwait;
}
publicvoidsetWait(intwait){
this.wait=wait;
}
publicvoidrun(){
Connectionconn=connectionFactory.getConnection();
try{
conn.setAutoCommit(false);
Statementstmn=conn.createStatement();
stmn.executeUpdate(sql);
System.out.println((newDate()).toString()+"执行"+sql);
this.sleep(wait);
mit();
System.out.println("线程结束"+(newDate()).toString());
}catch(Exceptione){
//TODOAuto-generatedcatchblock
e.printStackTrace();
}
}
}
有两个测试类client1.java
publicclassclient1{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
clientThreadclient=newclientThread();
client.setWait(10000);
client.setSql("update宿舍表set姓名=姓名+'1'where床铺=1");
client.start();
}
}
publicclassclient2{
/**
*@paramargs
*/
publicstaticvoidmain(String[]args){
clientThreadclient=newclientThread();
client.setWait(6000);
client.setSql("update宿舍表set姓名=姓名+'A'where床铺=1");
client.start();
}
}
请先执行client1然后马上执行client2,等所有程序,数据库中床铺=1的记录内容是什么?
为什么会这样?
实验报告
(二)
院系:
信息学院课程名称:
Web数据库技术日期:
班级
A1321
姓名
黄伟峰
专业
信息管理与信息系统
学号
11314030119
实验室
实验名称
Servlet应用
成绩评定
教师签名
实验目的
1、掌握servlet的配置方法
2、掌握web服务器的配置过程
3、掌握HttpServlet类的用法
4、掌握session等对象的用法
5、掌握请求转发功能的应用
6、掌握SerlvetConfig上下文的用法
实验内容
Servlet配置、servlet设计、会话管理、请求流转、上下文应用
1、请建立一个servlet类用于显示当前的系统时间。
写出它的url配置写法20分。
答案:
publicvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
response.setContentType("text/html");
PrintWriterout=response.getWriter();
out.println("
DOCTYPEHTMLPUBLIC\"-//W3C//DTDHTML4.01Transitional//EN\">");
out.println("");
out.println("
out.println("
out.println(" 50px;padding-top: 250px'>"); Datedate=newDate(); out.print(date.toLocaleString()); out.println("
out.println("");
out.println("");
out.flush();
out.close();
}
url配置写法:
生成servlt时将工程名去掉,只保留文件名,便于访问
2、领会多用户并发访问的机制,请建立一个HttpServlet——“servletUsers”类,在该类的成员代码如下:
publicclassserveltUsersextendsHttpServlet{
privateIntegerx=1;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsServletException,IOException{
this.doPost(request,response);
}
publicvoiddoPost(HttpServletRequest
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Web 数据库 学生 实验 报告