2024年1月15日发(作者:)
动态网页修改数据库数据
JSP动态网页连接访问数据库,修改数据的操作一般有两种方式,一种是用于前台的,只能修改数据库表中的一条记录;另一种是用于后台系统管理员操作使用的,可以方便的修改表中的任何一条记录。本节分别对两种进行介绍。
一、 范例的演示和代码清单
演示的前提和前几节完全相同。
演示步骤:
1. 启动IE,在地址栏键入127.0.0.1:8080/ch4/,用户名处,输入数据库表中,已经存在的一个用户名;密码处输入对应的密码。如图4-60所示窗口:
图4-60
2. 单击“提交”按钮。出现该用户所有资料的列表,其中用户名和密码两项,注有“不能更改”提示,其他项目都可以进行修改的操作。如图4-61所示窗口:
图4-61
3. 在对应的文本框中,将需要变动的数据进行修改,然后单击“修改”按钮。屏幕出现修改成功的信息,以及修改后数据列表。如图4-62所示窗口:
图4-62
4. 至此一条指定的数据记录修改完成。这属于一般用于前台,用户修改自己的注册资料用的修改方式。用于后台的系统管理员修改方式,请在此单击“返回浏览修改”,或返回主页后,单击“浏览修改”。出现浏览修改的界面。如图4-63所示窗口:
图4-63
5. 网页窗口显示的是,数据库表中的所有数据记录。并且在每一条记录的后面,有一个“修改”的链接。单击任何一条数据记录后面的“修改”,进入数据修改界面。如图4-64所示窗口:
图4-64
6. 这个网页窗口和前面单独修改一条记录的图4-61界面一样,只是数据内容不同。它们实际上是调用的同一个JSP动态网页。改动某些数据后,单击“修改”按钮。出现修改成功的信息,以及修改后数据列表。如图4-65所示窗口:
图4-65
7. 这个网页窗口和前面单独修改一条记录成功的图4-62界面一样,只是数据内容不同。它们实际上也是调用的同一个JSP动态网页。单击“返回浏览修改”,可以进行下一条记录的修改。
这个范例由四个网页构成:
1. :用表单的形式,提供需要修改数据记录的用户名、密码,表单的action指向。同时又是“浏览修改”的入口,链接指向。
2. :连接数据库,查询找到需要修改的数据记录。将每个字段数据,放入一个表单,供用户进行修改。修改的数据,提交后交给去更新数据库表中的数据记录。(这是本范例的重点网页)
3. :从获得数据,连接数据库,使用SQL更新语句,修改指定记录的数据。然后再查询数据库,从表中读取更新的数据记录,送到屏幕上显示。
4. :“浏览修改”的操作界面,设计的思路是,查询数据库表中所有数据记录,在显示界面,将每条记录的尾部添加一个“修改”链接。这个链接指向,用户点击“修改”链接时,同时将该条记录中的“用户名”、“密码”一并提交给。
四个网页的代码如下:
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇ 修改数据库
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例
1)
2)
3)
4)
5)
6)
7)
8)
9)
| 单独修改请输入: | ||
13) | width="70" width="459" height="159" name="form1" align="center" method="post" valign="top"> | |
| 浏览修改 | ||
48)
49)
colspan="2" valign="top">
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇ 修改数据
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例
1)
2)
3)
4)
5)
6)
7)
8)
9)
<%@page
<%
String name=ameter("name");
contentType="text/html;charset=gb2312" language="java"
import=".*" %>
10) String password=ameter("password");
11) e("bcDriver");
12) String url="jdbc:odbc:ch4";
13) Connection con=nection(url,"","");
14) Statement st=Statement();
15) String strSql="select * from st where 姓名='"+name+"' and 密码='"+password+"'";
16) ResultSet rs=eQuery(strSql);
17) if (!())
18) {("用户名或密码输入错误!");%>
19)
20) <%return;}
21) %>
22)
color="#000000" size="4" face="幼圆">请修改信息内容 | ||
81) <%();
82) ();%>
83)
84)
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇ 修改数据
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例
1)
2)
3)
4)
5)
6)
7)
8)
9)
<%@page
<%
String name=ameter("name");
contentType="text/html;charset=gb2312" language="java"
import=".*" %>
10) String password=ameter("password");
11) String sex=ameter("sex");
12) String clas=ameter("clas");
13) String na=ameter("na");
14) String email=ameter("email");
15) e("bcDriver");
16) String url="jdbc:odbc:ch4";
17) Connection con=nection(url,"","");
18) if(("")||("")||("")||(""))
19) { ("不能将信息修改为空值!");
20) return;}
21) %>
22) <%Statement stmt=Statement();
23) String sql="update st
24) eUpdate(sql);
25) Statement st=Statement();
26) String strSql="select * from st where 姓名='"+name+"'";
27) ResultSet rs=eQuery(strSql);
28) if(!())
29) return;
set 班级='"+clas+"',学号='"+na+"',性别='"+sex+"',Email='"+email+"' where 姓名='"+name+"' and 密码='"+password+"'";
30) %>
31)
信息修改成功!
修改后的信息为:
32)
| 班级: | <%(ing("班级"));%> |
| 学号: | <%(ing("学号"));%> |
| 姓名: | <%(ing("姓名"));%> |
| 性别: | <%(ing("性别"));%> |
| 密码: | <%(ing("密码"));%> |
| E-mail: | <%(ing("email"));%> |
58)
59)
60) <%
61) ();
62) ();
63) ();
64) %>
65)
66)
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇ 浏览修改数据
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例
1)
2)
3)
4)
5)
6)
7)
8)
9)
<%@page contentType="text/html;charset=gb2312" import=".*"%>
String DBDriver="bcDriver";
String ConnStr="jdbc:odbc:ch4";
String sql="select * from st";
String temp1,temp2,temp3,temp4,temp5,temp6;
e(DBDriver);
Connection conn=nection(ConnStr," "," ");
ResultSet rs;
Statement stmt=Statement();
rs=eQuery(sql);
n("数据库中数据如下:
");
n("
| 班级 | 学号 | 姓while(()) {
temp1=ing(1); temp2=ing(2); temp3=ing(3); temp4=ing(4); temp5=ing(5); temp6=ing(6); 10) <% 11) 12) 13) 14) 15) 16) 17) 18) 19) 20) 21) 22) 23) 24) 25) 26) 27) 28) 29) 30) 名 | 性别 | 密码 | 修改 | |
| "+temp1+" | "+temp2+" | " +temp3 +" | " +temp4 +" | " +temp5 +" | "+temp6+" | href='?name="+temp3+"&password="+temp5+"'>修改 |
37)
38)
39)
}
();
();
();
二、 网页重点代码的分析
静态网页(输入修改对象):
:本范例的起始网页。网页的主体是一个表单(单独修改),让用户输入需
要修改数据记录对应的用户名和密码,表单的action指向。
表单下面,有一个链接“浏览修改”的入口,指向。
这个网页很简单,不再作具体分析。需要说明的是,在实际的网站设计中,“单独修改”和“浏览修改”不会设计到同一个页面上。“单独修改”是针对用户使用的,必须通过验证用户名和密码,以避免资料被他人非法修改。“浏览修改”是提供给系统管理员使用的,属于后台管理的组成部分,应该有方便批量处理数据的能力。
提取修改对象数据,提供修改界面,的代码分析:
这个动态网页提供用户修改数据的界面,由以下几个部分构成:
第一部分: 获得提交的数据。(第9-10行)
9) String name=ameter("name");
10) String password=ameter("password");
将用户提交的用户名和密码数据,赋值给JSP变量name和password。
第二部分: 链接数据库。(第11-13行)
11) e("bcDriver");
12) String url="jdbc:odbc:ch4";
13) Connection con=nection(url,"","");
第11行:加载JDBC-ODBC驱动;
第12行:定义一个字符串url,指明数据源,为连接数据库进行准备;
第13行:连接数据库。
需要说明的是,这里没有使用异常的抛出和捕捉机制,使得代码行非常简练。但是连接数据库的操作有误时,程序将被挂起。
第三部分: 从数据库表中提取需要修改的数据。(第14-21行)
14) Statement st=Statement();
15) String strSql="select * from st where 姓名='"+name+"' and 密码='"+password+"'";
16) ResultSet rs=eQuery(strSql);
17) if (!())
18) {("用户名或密码输入错误!");%>
19)
20) <%return;}
21) %>
第14行:为运行SQL语句,准备一个对象st。(注意:这里的对象st和表st使用了同样的名称,但它们不是一回事。编制代码时,应注意避免这种情况发生)
第15行:准备查询用的SQL语句,赋值给字符串变量strSql
SQL语句是标准的复合条件查询语句,含义为,在st表中查询“姓名”、“密码”两个字段的值,都符合用户输入条件的数据记录。
第16行:运行SQL语句,将符合条件的数据记录,放入结果集rs中。
第17-20行:拦截错误数据的代码。如果用户输入的用户名不存在,或者是密码错误,在SQL查询语句运行时,就找不到相应的数据记录,数据指针移动到最后,“!()”条件成立,程序运行第18-20行,提示用户返回重新输入用户名和密码。
第四部分: 用户修改数据界面。(第22-80行)。
采用方法是,将查询获得的数据,放入一个表单,使用户能够修改,修改后提交给更新数据库的记录。具体的设计方法是,在Dreamweaver图形设计方式下,依据
数据库表中的字段项目,在前三部分代码行之后,创建一个表单,如图4-66所示:
图4-66
每个表单项的属性设置,如表4-2所示:
用户名:
密码:
班级:
学号:
性别:
E-mail:
Type
(类型)
hidden(隐藏)
hidden(隐藏)
text (文本)
text (文本)
text (文本)
text (文本)
Name
(表单项名称)
name
password
clas
na
sex
Value
(初始值)
<%=ing("姓名")%>
<%=ing("密码")%>
<%=ing("班级")%>
<%=ing("学号")%>
<%=ing("性别")%>
<%=ing("Email")%>
表4-2
每个表单项的初始值,设定为从结果集rs中读取的对应数据(也就是数据库表中的字段值)。有初始值的表单项,运行时显示初始值,这样就把需要修改的数据,从数据库表中提取出来,放置到了表单中。允许用户修改的项目(班级、学号、性别、E-mail),将表单项的类型设置为text(文本框),不允许用户修改的项目(用户名、密码),将表单项的类型设置为hidden(隐藏域)。表单中文本框的数据,可以随意修改。而隐藏域中的数据,屏幕不显示,无法进行改动。
为了整齐美观,将表单放置在表格当中。又考虑到,不允许用户修改的项目(用户名、密码)在运行时屏幕不显示,会造成用户操作不便。于是在隐藏域所在单元格中,添加了可显示而不能修改的对应变量。第33行的<%=name%> 和第40行的<%=password%>。
表单的action指向。
第五部分: 关闭rs和st两个对象。(第81-82行)
81) <%();
82) ();%>
这个动态网页,在使用Dreamweaver编制设计的过程中,需要在“代码”和“设计”两种方式下切换几次。第四部分的表单,主要在图形“设计”方式下进行,而33行的<%=name%> 和40行的<%=password%>的插入,又只能在“代码”方式下进行。
更新修改数据库数据,ch4-52jsp的代码分析:
这个动态网页,接收提交的修改数据,并用这些数据更新修改数据库表中的记录。修改完成后,再从数据库读取更新后的数据记录,送到屏幕显示。具体构成如下:
第一部分: 获得提交的修改数据(第9-14行)
9) String name=ameter("name");
10) String password=ameter("password");
11) String sex=ameter("sex");
12) String clas=ameter("clas");
13) String na=ameter("na");
14) String email=ameter("email");
第二部分: 连接数据库。(第15-17行)
15) e("bcDriver");
16) String url="jdbc:odbc:ch4";
17) Connection con=nection(url,"","");
第三部分: 拦截非法修改的数据(18-20行)
18) if(("")||("")||("")||(""))
19) { ("不能将信息修改为空值!");
20) return;}
21) %>
第18行,判断用户在修改数据时,如果将数据删除,形成了空值,就执行第19-20行代码,提示用户“不能将信息修改为空值”
第四部分: 更新修改数据库表中的记录(22-24行)
22) <%Statement stmt=Statement();
23) String sql=”update st set 班级=’”+clas+”’,学号=’”+na+”’,性别=’”+sex+”’,Email=’”+email+”’ where 姓名=’”+name+”’ and
密码=’”+password+”’”;
24) eUpdate(sql);
第22行,为运行SQL语句,创建一个对象stmt,
第23行,将更新数据库表中记录的SQL语句,赋值给字符串变量sql。
语句的含义为,更新st表中“姓名”和“密码”字段的值都符合条件的数据记录,用clas的值更新“班级”字段,用na的值更新“学号”字段,用sex的值更新“性别”字段,用email的值更新“Email”字段。
第24行,运行SQL语句,更新修改数据库
第五部分: 从数据库提取修改后的数据(第25-30)
25) Statement st=Statement();
26) String strSql="select * from st where 姓名='"+name+"'";
27) ResultSet rs=eQuery(strSql);
28) if(!())
29) return;
30) %>
第25行,为运行SQL语句,创建一个对象st,
第26行,将查询被修改数据记录的SQL语句,赋值给字符串变量strSql。
第27行,运行SQL语句,将查询的结果放入结果集rs
第28-29行,查找完成后返回,停止语句运行,避免程序挂起出错。
第六部分: 从结果集中,提取被修改数据记录,送到屏幕显示(第31-57)
这部分在Dreamweaver图形“设计”方式下进行,创建一个六行两列的表格,第一列是每个字段的名称,第二列是从结果集rs中提取的对应数据,见图4-67所示:
图4-67
第二列添入对应数据,要切换到Dreamweaver “设计”方式下进行,具体添入的数据,在代码的第35行、39行、43行、47行、51、55行。
35)
39)
43)
47)
51)
55)
第35行的代码<%(ing("班级"));%>是在对应的单元格显示输出结果集rs中“班级”的内容。其他各行的作用等同。
<%(ing("班级"));%>也可以书写成<%=ing("班级")%>,这是前面范例介绍过两种不同书写方式的JSP语句,它们的作用相同。
第七部分: 关闭rs、st、stmt三个对象(第60-64行)
这里需要说明,前面范例的动态网页连接数据库后,或者只进行读取操作,查询数据;或者只进行写操作,写入数据。而在这个动态网页中,连接数据库后,先进行写操作,更新数据;然后又进行读操作,查询修改后的数据。连接一次,进行两种操作。这种代码在编写时要注意,要分别创建写操作对象stmt(第22行)和读操作对象st(第25行),两个对象不能重名,而且都产生于(第17行的)连接对象con。
浏览修改据,ch4-53jsp的代码分析:
这个动态网页演示时,可以方便的选择任何表中一条记录,点击“修改”,无需输入“用户名”和“密码”,直接进入修改界面。如果仔细观察网页,不难发现,它和前面查询全部数据的范例网页基本相同,只是在每一条数据记录后面,多了一个“修改”链接。它实际就是查询全部数据网页的简单变形。
在代码上也是添加了一些新代码,使之能够方便进入对应数据记录的修改界面。另外这
个网页,去掉了异常的抛出和捕捉的处理,删去了相关的代码。添加的新代码体现在代码行的第21行和第30行:
21) n("
| 班级 | 学号 | 姓名 | 性别 | 密码 | 修改 | |
| "+temp1+" | "+temp2+" | align=center>"+temp3+" | "+temp4+" | "+temp5+" | align=center>"+temp6+" | href='?name="+temp3+"&password="+temp5+"'>修改 |
| 修改 第30行:显示输出表中每一条记录,并在数据记录后面添加一个“修改”链接,添加的代码是 | 修改, 被添加代码的含义是,链接到,同时将temp3(姓名)的数值和temp5(密码)的数值也传送过去。temp3传给表单项name,temp5传给表单项password 。所有就能自动读取到,需要获得的数据了。这实际上是JSP的输入语句,注意它的格式,在被输入的文件名后,要有一个“?”,之后是该文件获得数据语句中的表单项名称,再之后的“=”等号后是传送的具体数据。
本文发布于:2024-01-15,感谢您对本站的认可! 版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。 |


发布评论