Web数据库学生实验报告版课案.docx

上传人:b****5 文档编号:27921196 上传时间:2023-07-06 格式:DOCX 页数:37 大小:84.21KB
下载 相关 举报
Web数据库学生实验报告版课案.docx_第1页
第1页 / 共37页
Web数据库学生实验报告版课案.docx_第2页
第2页 / 共37页
Web数据库学生实验报告版课案.docx_第3页
第3页 / 共37页
Web数据库学生实验报告版课案.docx_第4页
第4页 / 共37页
Web数据库学生实验报告版课案.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

Web数据库学生实验报告版课案.docx

《Web数据库学生实验报告版课案.docx》由会员分享,可在线阅读,更多相关《Web数据库学生实验报告版课案.docx(37页珍藏版)》请在冰豆网上搜索。

Web数据库学生实验报告版课案.docx

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{

publicstaticArrayListstudents=newArrayList();

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("AServlet");

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(HttpServletReque

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 自然科学 > 生物学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1