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在数据库中建表
不用代码的方式:
这里写图片描述
代码方式:

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

  • 6
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 12
    评论
评论 12
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值