JSP中Sql Server的JDBC数据库条件查询

一,实验要求
编写三个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在数据库中建表
不用代码的方式:
JSP中Sql Server的JDBC数据库条件查询_第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','[email protected]');
insert into JStudent
values('002','二狗','1997-01-01','[email protected]');
insert into JStudent
values('003','牛牛','1996-09-02','[email protected]');
insert into JStudent
values('004','略略','1996-12-24','[email protected]');
insert into JStudent
values('005','花花','1996-07-18','[email protected]');
--select * from JStudent where name like '%花%'--模糊查询

JSP中Sql Server的JDBC数据库条件查询_第2张图片
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.*" %>          
<%@ attribute name="number" required="true" %>
<%@ variable name-given="queryResultByNumber" scope="AT_END" %>
<%
    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("");
        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("");
        while(rs1.next()){
            countColumns++;
            String columnName=rs1.getString(4);
            result.append(""); 
        }
        rs1.close();//关闭结果集
        result.append("");

        /*获取查询的内容*/
        String sql="select * from JStudent Where number='"+number+"'";//6,声明sql语句
        rs=stmt.executeQuery(sql);//执行sql语句,返回一个查询结果集(二维表)
        while(rs.next()){//7,对结果集进行处理
            result.append("");
            for(int k=1;k<=countColumns;k++){
                result.append("");//每行的内容
            }//for结束
            result.append("");         
        }//while结束
        result.append("
"+columnName+"
"+rs.getString(k)+"
"
); //查询结束 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("");
      /*获取第一行的字段名*/
      result.append("");
      int columns=0;//列数
      while(rs1.next()){
          columns++;
          String columnName=rs1.getString(4);
          result.append("");
      }
     result.append("");

     Statement sta=con.createStatement();
     String sql="select * from JStudent where name  like '%"+name+"%' ";
     rs=sta.executeQuery(sql);
     result.append("");
     while(rs.next()){
         for(int k=1;k<=columns;k++){
             result.append("");
         } 
         result.append("");
     }//while结束
     result.append("
"+columnName+"
"+rs.getString(k)+"
"
); con.close(); }//try结束 catch(SQLException e){ result.append(e); } jspContext.setAttribute("queryResultByName",new String(result)); %>

2.3 运行结果

(1)inputCondition.jsp输入查询条件
JSP中Sql Server的JDBC数据库条件查询_第3张图片
(2)根据学号查询
JSP中Sql Server的JDBC数据库条件查询_第4张图片
(3)根据姓名(模糊查询)
JSP中Sql Server的JDBC数据库条件查询_第5张图片

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等都满足要求.

你可能感兴趣的:(数据库)