Web数据库学生实验报告版文档格式.docx
《Web数据库学生实验报告版文档格式.docx》由会员分享,可在线阅读,更多相关《Web数据库学生实验报告版文档格式.docx(31页珍藏版)》请在冰豆网上搜索。
(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<
student>
students=newArrayList<
();
static{
studentstu=newstudent("
会计A001121"
"
张三"
31栋908"
1);
students.add(stu);
stu=newstudent("
会计A001166"
李四"
2);
会计A001177"
王五"
31栋807"
4);
}
现要求
(1)根据student类建立一个学生表用来保存student类的相关属性。
(2)通过jdbc,将studentDatas的students集合中的所有学生保持到学生表中;
(3)通过jdbc,将学生表中所有的宿舍是”31栋908”学生全部调整到“20栋371”宿舍;
(4)通过jdbc,删除"
床铺号是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=?
orderbycreated_timedesc)row_whererownum<
=?
)whererownum_>
分别为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'
);
李四'
200'
王五'
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!
conn1.close();
(2)程序2:
publicclasstrans2{
conn1.setAutoCommit(false);
请查询数据库记录内容。
(3)完整事务程序3:
mit();
System.out.println("
insert语句执行"
conn1.rollback();
}catch(SQLExceptione1){
//TODOAuto-generatedcatchblock
e1.printStackTrace();
}finally{
如果需要将下面"
update"
及"
insert"
作为一个事务来整体提交,请问下面代码如果改?
publicclasstrans3{
Connectionconn2=null;
Statementstmn2=null;
conn2=connectionFactory.getConnection();
stmn2=conn2.createStatement();
stmn2.executeUpdate("
500'
)"
if(stmn2!
已知有线程类定义如下:
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();
线程结束"
+(newDate()).toString());
}catch(Exceptione){
有两个测试类client1.java
publicclassclient1{
clientThreadclient=newclientThread();
client.setWait(10000);
client.setSql("
update宿舍表set姓名=姓名+'
1'
where床铺=1"
client.start();
publicclassclient2{
client.setWait(6000);
A'
请先执行client1然后马上执行client2,等所有程序,数据库中床铺=1的记录内容是什么?
为什么会这样?
实验报告
(二)
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\"
>
HTML>
<
HEAD>
TITLE>
AServlet<
/TITLE>
/HEAD>
BODY>
center>
divstyle='
font-size:
50px;
padding-top:
250px'
Datedate=newDate();
out.print(date.toLocaleString());
/div>
/center>
/BODY>
/HTML>
out.flush();
out.close();
url配置写法:
生成servlt时将工程名去掉,只保留文件名,便于访问
2、领会多用户并发访问的机制,请建立一个HttpServlet——“servletUsers”类,在该类的成员代码如下:
publicclassserveltUsersextendsHttpServlet{
privateIntegerx=1;
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
this.doPost(request,response);
publicvoiddoPost(HttpServletRequest