一,实验要求
编写三个JSP页面:inputCondition.jsp、 byNumber.jsp和byName.jsp页面。编写两个Tag文件:NumberCondtion.tag和NameConditon.tag。
1.inputCondition.jsp的具体要求
inputCondition.jsp页面提供两个表单。其中一个表单允许用户输入要查询的学生的学号,即输入message表中number字段的查询条件,然后将查询条件提交给要byNumber.jsp,另一个表单允许用户输入要查询的学生的姓名,即输入message表中name字段的查询条件,然后将查询条件提交给要byName.jsp
2.byNumber.jsp的具体要求
byNumber.jsp页面首先获得inputCondition.jsp页面提交的关于number字段的查询条件,然后使用Tag标记调用Tag文件ByNumber.tag,并将number字段的查询条件传递给ByNumber.tag。
3.byName.jsp的具体要求
byName.jsp页面首先获得inputCondition.jsp页面提交的关于name字段的查询条件,然后使用Tag标记调用Tag文件ByName.tag,并将name字段的查询条件传递给ByName.tag。。
4.NumberCondtion.tag的具体要求
NumberCondtion.tag文件使用attribute指令获得byNumber.jsp页面传递过来的number字段的查询条件,然后和和数据库建立连接、根据得到的查询条件查询表。NumberCondtion.tag文件使用variable指令将查询结果返回给byNumber.jsp页面。
5.NameConditone.tag的具体要求
NameConditon.tag文件使用attribute指令获得byName.jsp页面传递过来的name字段的查询条件,然后和和数据库建立连接、根据得到的查询条件查询表。NameConditon.tag文件使用variable指令将查询结果返回给byName.jsp页面。
代码:
二,实验过程
2,1在数据库中建表
不用代码的方式:
代码方式:
create database jspStudent
USE jspStudent
CREATE TABLE JStudent(--管理员表
number char(30) primary key,--学号--varchar存储长度为实际输入数据字节实际长度
name varchar(30),--姓名
birthday char(30),
email char(20),
);
select * from JStudent
insert into JStudent
values('001','蚂蚁','1997-06-08','mayi@sina.com');
insert into JStudent
values('002','二狗','1997-01-01','yuxue@qq.com');
insert into JStudent
values('003','牛牛','1996-09-02','niuniu@163.com');
insert into JStudent
values('004','略略','1996-12-24','lue@139.com');
insert into JStudent
values('005','花花','1996-07-18','flower@qq.com');
--select * from JStudent where name like '%花%'--模糊查询
2,2在eclipse中新建web项目,编写代码
1,inputCondition.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<html><body>
<form action="byNumber.jsp" method=post>
根据学号查询<br>
输入学号:<br>
<input type="text" name="number">
<input type="submit" name="numberSubmit" value="提交">
</form>
<form action="byName.jsp" method=post>
<BR> 根据姓名(模糊)查询<br>
姓名含有<input type="text" name="name">
<input type="submit" name="aname" value="提交">
</form>
</body>
</html>
2,byNumber.jsp
<%@ page contentType="text/html;charset=utf-8" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="inquire"%>
<html><body bgcolor=cyan>
<%
String number=request.getParameter("number");//从inputCondition.jsp中获取输入的number
%>
<inquire:NumberCondition number="<%=number%>" />
根据学号<%=number%>查询到的记录:
<br><%=queryResultByNumber%>
</body></html>
3,NumberCondition.tag
<%@ tag pageEncoding="utf-8" %>
<%@ tag import="java.sql.*" %> <!-- 1,导入java.sql包 -->
<%@ attribute name="number" required="true" %>
<%@ variable name-given="queryResultByNumber" scope="AT_END" %><!-- 给byNumber.jsp返回一个结果集 -->
<%
StringBuffer result=new StringBuffer();
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");//2,装载驱动程序
}
catch(Exception e){
}
Connection con;
Statement stmt;
ResultSet rs;
try{
result.append("<table border=1>");
String uri="jdbc:sqlserver://127.0.0.1:1433;DatabaseName=jspStudent";//3,定义要连接的数据库资源
con=DriverManager.getConnection(uri,"sa","123456");//4,建立与数据库的连接
stmt=con.createStatement();//5,建立语句对象
/*获取表格的第一行,即列属性名*/
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,"JStudent",null);
int countColumns=0;//表的列数
result.append("<tr>");
while(rs1.next()){
countColumns++;
String columnName=rs1.getString(4);
result.append("<td>"+columnName+"</td>");
}
rs1.close();//关闭结果集
result.append("</tr>");
/*获取查询的内容*/
String sql="select * from JStudent Where number='"+number+"'";//6,声明sql语句
rs=stmt.executeQuery(sql);//执行sql语句,返回一个查询结果集(二维表)
while(rs.next()){//7,对结果集进行处理
result.append("<tr>");
for(int k=1;k<=countColumns;k++){
result.append("<td>"+rs.getString(k)+"</td>");//每行的内容
}//for结束
result.append("</tr>");
}//while结束
result.append("</table>"); //查询结束
rs.close();//关闭结果集
stmt.close();//关闭语句对象
con.close();//关闭连接
}//try结束
catch(SQLException e){
result.append(e);
}
jspContext.setAttribute("queryResultByNumber",new String(result));
%>
4,byName.jsp
<%@ page contentType="text/html; charset=utf-8" %>
<%@ taglib tagdir="/WEB-INF/tags" prefix="inquire" %>
<html><body bgcolor=pink>
<%
request.setCharacterEncoding("utf-8");
String name=request.getParameter("name");
%>
<inquire:NameCondition name="<%=name%>" />
姓名含有<%=name%>的记录:
<br><%=queryResultByName%>
</body></html>
5,NameCondition.tag
<%@ tag pageEncoding="utf-8" %>
<%@ tag import="java.sql.*" %>
<%@ attribute name="name" required="true" %>
<%@ variable name-given="queryResultByName" scope="AT_END" %>
<%
try{
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
}
catch(Exception e)
{
}
StringBuffer result=new StringBuffer();
ResultSet rs;
try{
String uri="jdbc:sqlserver://127.0.0.1:1433;DataBaseName=jspStudent";
Connection con=DriverManager.getConnection(uri,"sa","123456");
DatabaseMetaData metadata=con.getMetaData();
ResultSet rs1=metadata.getColumns(null,null,"JStudent",null);
result.append("<table border=1>");
/*获取第一行的字段名*/
result.append("<tr>");
int columns=0;//列数
while(rs1.next()){
columns++;
String columnName=rs1.getString(4);
result.append("<td>"+columnName+"</td>");
}
result.append("</tr>");
Statement sta=con.createStatement();
String sql="select * from JStudent where name like '%"+name+"%' ";
rs=sta.executeQuery(sql);
result.append("<tr>");
while(rs.next()){
for(int k=1;k<=columns;k++){
result.append("<td>"+rs.getString(k)+"</td>");
}
result.append("</tr>");
}//while结束
result.append("</table>");
con.close();
}//try结束
catch(SQLException e){
result.append(e);
}
jspContext.setAttribute("queryResultByName",new String(result));
%>
2.3 运行结果
(1)inputCondition.jsp输入查询条件
(2)根据学号查询
(3)根据姓名(模糊查询)
sql server的模糊查询:
%代表任意长度(长度可以为0)的字符串.例如a%b表示以a开头,以b结尾的任意长度的字符串.如acb,acdb,ab都满足要求.
select * from JStudent where name like ‘%花%’
%花%表示含有’花’的任意长度的字符串.
若要查询不含有’花’的在like前加 not 即可.
-(下横线)代表任意单个字符
例如a_b表示以a开头,以b结尾的长度为3的任意的字符串.如acb,adb等都满足要求.