回麻雀苑主页
4-7动态网页综合查询数据库数据
作者:老麻雀
2006/11/5 10:06:11
动态网页综合查询数据库数据
JSP动态网页连接访问数据库,查询数据的操作,上一节介绍了查询的基本操作。而在实际应用中,查询的方式多种多样,本节介绍数据库数据的模糊查询、分类查询。
一、 范例的演示和代码清单
演示的前提和上一节完全相同。
演示步骤:
1. 启动IE,在地址栏键入http://127.0.0.1:8080/ch4/ch4-42.htm,如图4-55所示:
图4-55
窗口中有三种查询方式,四个“查询”按钮。
2. 单击查询全部数据的“查询”按钮如图4-56所示:
图4-56
3. 在模糊查询的姓名栏中,输入“赵”,单击“查询”按钮,数据库表中“姓名”字段中,包含“赵”的记录。显示在屏幕上,如图4-57所示:
图4-57
4. 在分类查询的按班级列表框中,选择“04003”,单击“查询”,数据库表中“班级”字段中,是“04003”的记录。显示在屏幕上,按钮如图4-58所示:
图4-58
5. 在分类查询的按性别列表框中,选择“男”,单击“查询”按钮,数据库表中“性别”字段中,是“男”的记录。显示在屏幕上,如图4-59所示:
图4-59
以上在ch4-42.htm网页窗口中,选择不同的查询方式,都得到了符合查询条件的查询结果。实际上每个“查询”按钮,指向了不同的JSP动态网页。这个范例是由一个HTML静态网页ch4-22.htm和四个JSP动态网页ch4-32.jsp、ch4-33.jsp、ch4-34.jsp、ch4-35.jsp构成。
四个网页的代码如下:
◇-◇-◇-◇-◇-◇-◇-◇ 查询数据库 ◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-42.htm
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>查询数据库</title>
5) <body bgcolor="FFFFCC">
6) <p> </p>
7) <p>
8) <table width="716" border="0">
9) <tr>
10) <td height="45">查询全部数据: <a href="ch4-32.jsp"><img src="img/chaxun.jpg" width="38" height="18" border="0"></a>
11) </tr>
12) <tr>
13) <td height="45">模糊查询: </td>
14) </tr>
15) <tr>
16) <td height="45"><form name="form1" method="post" action="ch4-33.jsp">
17) 姓名
18) <input name="name" type="text" id="name">
19) <input type="submit" name="Submit" value="查询">
20) </form></td>
21) </tr>
22) <tr>
23) <td height="45">分类查询:</td>
24) </tr>
25) <tr>
26) <td height="45"><form name="form2" method="post" action="ch4-34.jsp">
27) 按班级
28) <select name="clas" id="clas">
29) <option value="04001">04001</option>
30) <option value="04002">04002</option>
31) <option value="04003">04003</option>
32) </select>
33) <input type="submit" name="Submit" value="查询">
34) </form></td>
35) </tr>
36) <tr>
37) <td height="45"><form name="form3" method="post" action="ch4-35.JSP">
38) 按性别
39) <select name="sex" id="sex">
40) <option value="男">男</option>
41) <option value="女">女</option>
42) </select>
43) <input type="submit" name="Submit" value="查询">
44) </form></td>
45) </tr>
46) </table>
47) <p><a href="ch4.htm" target="_top">返回</a></p>
48) <p> </p>
49) </body>
50) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇ 查询Access数据库 ◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-32.jsp
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>查询Access数据库</title>
5) <style type="text/css">
6) body { background-color: #FFFFCC;}
7) </style></head>
8) <body><p>
9) <%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>
10) <%
11) String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
12) String ConnStr="jdbc:odbc:ch4";
13) String sql="select * from st";
14) String temp1,temp2,temp3,temp4,temp5,temp6;
15) try
16) {
17) Class.forName(DBDriver);
18) }
19) catch(java.lang.ClassNotFoundException e)
20) {
21) System.err.println("database:"+e.getMessage());
22) out.println("驱动未能加载");
23) }
24) try
25) {
26) Connection conn=DriverManager.getConnection(ConnStr," "," ");
27) ResultSet rs;
28) Statement stmt=conn.createStatement();
29) rs=stmt.executeQuery(sql);
30) out.println("数据库中数据如下:<br>");
31) out.println("<table border=1><tr align=center><td>班级<td>学号<td>姓名<td>性别<td>密码<td>E-mail<tr>");
32) while(rs.next())
33) {
34) temp1=rs.getString(1);
35) temp2=rs.getString(2);
36) temp3=rs.getString(3);
37) temp4=rs.getString(4);
38) temp5=rs.getString(5);
39) temp6=rs.getString(6);
40) out.print("<tr><td>"+temp1+"<td align=center>"+temp2+"<td align=center>"+temp3+"<td align=center>"+temp4+"<td align=center>"+temp5+"<td align=center>"+temp6+"</a><tr>");
41) }
42) rs.close();
43) stmt.close();
44) conn.close();
45) }
46) catch(SQLException e)
47) {
48) System.err.println("executeQuery:"+e.getMessage());
49) out.println("数据未能读出");
50) }
51) %>
52) </table>
53) <p><a href="ch4-3.htm">返回资料填写页</a></p>
54) </body>
55) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇ 按姓名查询 ◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-33.jsp
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title> 按姓名查询</title>
5) </head>
6) <body bgcolor="FFFFCC">
7) <%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>
8) <%
9) String name=new String(request.getParameter("name"));
10) String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
11) String ConnStr="jdbc:odbc:ch4";
12) String temp1,temp2,temp3,temp4,temp5,temp6;
13) String sql="select * from st where 姓名 like "+""%"+name+"%"";
14) try
15) {
16) Class.forName(DBDriver);
17) }
18) catch(java.lang.ClassNotFoundException e)
19) {
20) System.err.println("database:"+e.getMessage());
21) out.println("驱动未能加载");
22) }
23) try
24) {
25) Connection conn=DriverManager.getConnection(ConnStr," "," ");
26) ResultSet rs;
27) Statement stmt=conn.createStatement();
28) rs=stmt.executeQuery(sql);
29) out.println("查询结果如下::<br>");
30) out.println("<table border=1><tr align=center><td>班级<td>学号<td>姓名<td>性别<td>密码<td>E-mail<tr>");
31) while(rs.next())
32) {
33) temp1=rs.getString(1);
34) temp2=rs.getString(2);
35) temp3=rs.getString(3);
36) temp4=rs.getString(4);
37) temp5=rs.getString(5);
38) temp6=rs.getString(6);
39) out.print("<tr><td>"+temp1+"<td align=center>"+temp2+"<td align=center>"+temp3+"<td align=center>"+temp4+"<td align=center>"+temp5+"<td align=center>"+temp6+"</a><tr>");
40) }
41) rs.close();
42) stmt.close();
43) conn.close();
44) }
45) catch(SQLException e)
46) {
47) System.err.println("executeQuery:"+e.getMessage());
48) out.println("数据未能读出");
49) }
50) %>
51) </table>
52) <p><a href="ch4-42.htm">返回查询页</a></p>
53) </body>
54) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇ 按班级查询 ◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-34.jsp
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>按班级查询</title>
5) </head>
6) <body bgcolor="FFFFCC">
7) <%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>
8) <%
9) String name=new String(request.getParameter("clas"));
10) String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
11) String ConnStr="jdbc:odbc:ch4";
12) String temp1,temp2,temp3,temp4,temp5,temp6;
13) String sql="select * from st where 班级="+"""+name+""";
14) try
15) {
16) Class.forName(DBDriver);
17) }
18) catch(java.lang.ClassNotFoundException e)
19) {
20) System.err.println("database:"+e.getMessage());
21) out.println("驱动未能加载");
22) }
23) try
24) {
25) Connection conn=DriverManager.getConnection(ConnStr," "," ");
26) ResultSet rs;
27) Statement stmt=conn.createStatement();
28) rs=stmt.executeQuery(sql);
29) out.println("查询结果如下::<br>");
30) out.println("<table border=1><tr align=center><td>班级<td>学号<td>姓名<td>性别<td>密码<td>E-mail<tr>");
31) while(rs.next())
32) {
33) temp1=rs.getString(1);
34) temp2=rs.getString(2);
35) temp3=rs.getString(3);
36) temp4=rs.getString(4);
37) temp5=rs.getString(5);
38) temp6=rs.getString(6);
39) out.print("<tr>"+"<td>"+temp1+"<td>"+temp2+"<td>"+temp3+"<td>"+temp4+"<td>"+temp5+"<td>"+temp6+"</tr>");
40) }
41) rs.close();
42) stmt.close();
43) conn.close();
44) }
45) catch(SQLException e)
46) {
47) System.err.println("executeQuery:"+e.getMessage());
48) }
49) %>
50) </table>
51) <p><a href="ch4-42.htm">返回查询页</a></p>
52)
53) </body>
54) </html>
◇-◇-◇-◇-◇-◇-◇-◇-◇-◇ 按性别查询 ◇-◇-◇-◇-◇-◇-◇-◇-◇-◇
范例ch4-35.jsp
1) <html>
2) <head>
3) <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
4) <title>按性别查询</title>
5) </head>
6) <body bgcolor="FFFFCC">
7) <%@page contentType="text/html;charset=gb2312" import="java.sql.*"%>
8) <%
9) String name=new String(request.getParameter("sex"));
10) String DBDriver="sun.jdbc.odbc.JdbcOdbcDriver";
11) String ConnStr="jdbc:odbc:ch4";
12) String temp1,temp2,temp3,temp4,temp5,temp6;
13) String sql="select * from st where 性别="+"""+name+""";
14) try
15) {
16) Class.forName(DBDriver);
17) }
18) catch(java.lang.ClassNotFoundException e)
19) {
20) System.err.println("database:"+e.getMessage());
21) out.println("驱动未能加载");
22) }
23) try
24) {
25) Connection conn=DriverManager.getConnection(ConnStr," "," ");
26) ResultSet rs;
27) Statement stmt=conn.createStatement();
28) rs=stmt.executeQuery(sql);
29) out.println("查询结果如下::<br>");
30) out.println("<table border=1><tr align=center><td>班级<td>学号<td>姓名<td>性别<td>密码<td>E-mail<tr>");
31) while(rs.next())
32) {
33) temp1=rs.getString(1);
34) temp2=rs.getString(2);
35) temp3=rs.getString(3);
36) temp4=rs.getString(4);
37) temp5=rs.getString(5);
38) temp6=rs.getString(6);
39) out.print("<tr>"+"<td>"+temp1+"<td>"+temp2+"<td>"+temp3+"<td>"+temp4+"<td>"+temp5+"<td>"+temp6+"</tr>");
40) }
41) rs.close();
42) stmt.close();
43) conn.close();
44) }
45) catch(SQLException e)
46) {
47) System.err.println("executeQuery:"+e.getMessage());
48) }
49) %>
50) </table>
51) <p><a href="ch4-42.htm">返回查询页</a></p>
52)
53) </body>
54) </html>
二、 网页重点代码的分析
静态网页Ch4-42.htm:
Ch4-42.htm页面的作用是提供四个查询的入口。
第一项, 查询全部数据,“查询”按钮是一幅图片,链接指向ch4-32.jsp。
第二项, 模糊查询是一个表单,表单中只有一个文本框“姓名”,“查询”按钮属于表单的提交按钮。表单的action指向ch4-33.jsp。
第三项, 分类查询的“按班级”也是一个表单,表单中只有一个下拉列表,列表的值分别为“04001”、“04002”、“04003”三项,“查询”按钮属于表单的提交按钮。表单的action指向ch4-34.jsp。
第四项, 分类查询的“按性别”还是一个表单,表单中只有一个下拉列表,列表的值分别为“男”、“女”两项,“查询”按钮属于表单的提交按钮。表单的action指向ch4-35.jsp。
这四个查询是相互之间,没有直接联系的单独查询。每个查询调用自己的JSP文档。这个HTML文档只是把四个查询(一个链接、三个表单)做到了一个页面上。
查询全部数据,ch4-32.jsp
这个动态网页,在前面第六节中已经进行了具体分析,本节不再重复。这里只是根据页面的设计需求,添加了这样一个链接。
模糊查询,ch4-33.jsp
这个动态网页,和ch4-32.jsp没有本质上的区别,只是多了一行(第9行)获得数据的代码,String name=new String(request.getParameter("name"));另外查询的SQL语句中使用了模糊查询,其他的代码和ch4-32.jsp内容是一样的。模糊查询的SQL语句在代码的第13行:
13) String sql="select * from st where 姓名 like "+""%"+name+"%"";
代码中的“name”如果获得的数据是“赵”,SQL语句的原型如下:
select * from st where 姓名 like " % 赵 %"
其中的like是模糊查询的关键字,两个% %之间的内容,是查询条件中包含的内容。这条SQL语句的含义是,查询st表,姓名字段中包含“赵”的所有记录。
分类查询“按班级”,ch4-34.jsp
这个动态网页,和ch4-33.jsp除了第9行String name=new String (request.getParameter ("clas"));获得数据的内容不同,第13行查询的SQL语句不同,其他的代码内容是完全相同的。SQL语句是典型的条件查询语句,第13行的代码如下:
13) String sql="select * from st where 班级="+"""+name+""";
这行代码中的“name”如果获得的数据是“04003”,SQL语句的原型如下:
select * from st where 班级 = " 04003"
这条SQL语句的含义是,查询st表中,班级字段的值为“04003”的所有记录。
分类查询“按性别”,ch4-35.jsp
这个动态网页,和ch4-34.jsp除了第9行String name=new String(request.getParameter("sex"));获得数据的内容不同,第13行查询的SQL语句不同,其他的代码内容是完全相同的。SQL语句是典型的条件查询语句,第13行的代码如下:
13) String sql="select * from st where 性别="+"""+name+""";
这行代码中的“name”如果获得的数据是“男”,SQL语句的原型如下:
select * from st where 性别 = " 男 "
这条SQL语句的含义是,查询st表中,性别字段的值为“男”的所有记录。
本节的范例,都是专门进行数据查询的动态网页。在网站的设计中,往往写入数据前,要查询一下是否写入的数据记录,是重复记录。如果是重复记录,将进行拦截。不是重复记录,才允许写入。在修改数据前,也要查询一下,将数据库表的指针,定位到需要修改的记录,然后才进行修改。这种与其他操作相配合进行的查询,在后面的范例中,将进行介绍。请读者届时给予注意。
发表须知: 一、用户须严格遵守国家法律和政策,包括但不限于《全国人大常委会关于维护互联网安全的决定》、《信息网络传播权保护条例》等规定,审慎、合法地利用伊妃(E-file)平台发表言论、作品。 二、用户的言论、行为若涉嫌违法或侵权,用户可能被强制承担因该行为直接或间接导致的全部法律责任。依照法律法规规定,伊妃(E-file)运营方有义务提供用户资料,有义务和权利采取删除、屏蔽、断开链接等各种必要措施。 三、伊妃(E-file)中心授权网络法律专业研究服务机构“网络法苑”为用户及客户提供包括免费咨询在内的全方位的法律支持。 |