周一测试多条件查询

要求仿照知网高级查询页面重构期中考试多条件查询功能,可以根据志愿者姓名、性别、民族、政治面目、服务类别、注册时间六种条件实现模糊查询,输出结果以列表形式显示,显示姓名、性别,民族、政治面目基本信息,点击列表中的姓名,跳转到志愿者个人详细信息页面。

  难点在于sql语句的拼接和动态添加删除文本框和下拉框。 为了简便我选择用table表格,因为它删除时可以简单的用其函数删除任意一行,动态添加我是用字符串拼接,将html代码用innetHTML方法写入。因为不知道条件框有几个,所以得获取条件框的个数,而且sql语句也得拼接。条件有三个,与或非,查询内容,精确或者模糊,所以在拼接时需要注意,如果在与或非条件,如果是与或,则直接在sql语句后拼接,但如果是非(not like) 所以需要在查询内容后拼接,比如你要查姓名非性别,就得写出 “select * from 表名 where name = ... and sex not like ...”而不是 “select * from 表名 where name 。 ...not like sex  ...”,这样是sql语句的错误。在精确查询是,如果是精确则为=,如果是模糊则为not like。  具体看代码

查询界面:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
<style type="text/css">
#table{
font-size:20px;
} input[type='text'] {
font-size:20px;
width: 250px;
height: 30px;
}
input[type='button'] {
font-size:20px;
width: 50px;
height: 30px;
}
</style>
</head>
<body style="background-color:#EBC79E">
<%
Object message = request.getAttribute("message");
if(message!=null && !"".equals(message)){
%>
<script type="text/javascript">
alert("<%=request.getAttribute("message")%>");
</script>
<% }%>
<form action="Servlet1?method=search" method="post">
<table name="tbl" id="tbl">
<tr>
<td>
<input type="button" value="+" onclick="insert_row()">
<input type="button" value="-" onclick="deleteRow(this)">
<select id="select1" name="select1" style='width:120px;font-size:17px'>
<option value="name">姓名</option>
<option value="sex">性别</option>
<option value="minzu">民族</option>
<option value="zhengzhi">政治面目</option>
<option value="fuwu">服务类别</option>
<option value="time">注册时间</option>
</select>
<input type="text" id="SearchBox1" name="SearchBox1">
<select id="type1" name="TYPE1" style='width:50px;height:30px;fone-size:30px'>
<option value="=">精确</option>
<option value="like">模糊</option>
</select>
</td>
</tr>
</table>
<div id="SearchButton">
<input type="submit" value="查询" style="width:50px;height:30px;font-size:17px;">
</div>
</form> <table id="table">
<tr>
<td>姓名</td><td></td><td></td><td></td>
<td>性别</td><td></td><td></td><td></td>
<td>民族</td><td></td><td></td><td></td>
<td>政治面貌</td><td></td><td></td><td></td>
</tr>
<c:forEach items="${list}" var = "volunteer">
<tr>
<td><a href="Servlet1?method=searchAtName&name=${volunteer.name}">${volunteer.name}</a></td><td></td><td></td><td></td>
<td>${volunteer.sex}</td><td></td><td></td><td></td>
<td>${volunteer.minzu}</td><td></td><td></td><td></td>
<td>${volunteer.zhengzhi}</td><td></td><td></td><td></td>
</tr>
</c:forEach>
</table>
</body>
<script type="text/javascript">
var i=1;
var first = 1;
function insert_row(){
if(i>=6){
return;
}
i ++;
R = tbl.insertRow(); //insertRow() 方法用于在表格中的指定位置插入一个新行。
C = R.insertCell(); //insertCell() 方法用于在 HTML 表的一行的指定位置插入一个空的 <td> 元素。
C.innerHTML = "<select style='width:50px;height:30px;fone-size:30px' id='type"+i+"' name='type"+i+"'>"+
"<option value='and' >并且</option>"+
"<option value='or' >或者</option>"+
"<option value='not like' >不含</option>"+
"</select>"+"&nbsp;<select style='width:120px;font-size:17px' id='select"+i+"' name='select"+i+"'>"+
"<option value='name' >姓名</option>"+
"<option value='sex' >性别</option>"+
"<option value='minzu'>民族</option>"+
"<option value='zhengzhi'>政治面目</option>"+
"<option value='fuwu'>服务类别</option>"+
"<option value='time'>注册时间</option>"+
"</select>"+"&nbsp;<input type='text' id='SearchBox"+i+"' name='SearchBox"+i+"' />"+
"&nbsp;<select style='width:50px;height:30px;fone-size:30px' id='TYPE"+i+"' name='TYPE"+i+"'>"+
"<option value='=' >精确</option>"+
"<option value='like' >模糊</option>"+
"</select>";
}
function deleteRow(obj){
if(i<=1){
return;
}
// deleteRow() 方法用于从表格删除指定位置的行 是从0开始
tbl.deleteRow(i-1);
i--;
}
</script>
</html>

Servlet层!!!!!重点:

package Servlet;

import java.io.IOException;
import java.util.List; import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import Bin.Volunteer;
import Dao.Dao; /**
* Servlet implementation class Servlet1
*/
@WebServlet("/Servlet1")
public class Servlet1 extends HttpServlet {
private static final long serialVersionUID = 1L; /**
* @see HttpServlet#HttpServlet()
*/ protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
req.setCharacterEncoding("utf-8");
String method = req.getParameter("method");
if(method.equals("search")) {
search(req,resp);
}else if(method.equals("searchAtName")) {
searchAtName(req,resp);
}
}
// 通过多条件查询
private void search(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
String select[] = new String[6];
String type[] = new String[5];
String TYPE[] = new String[6];
String SearchBox[] = new String[6];
// 获取查询的条件:名字等
for(int i=0;i<6;i++) {
select[i] = request.getParameter("select"+(i+1));
}
// 获取查询条件:并且等
for(int i=1;i<6;i++) {
type[i-1] = request.getParameter("type"+(i+1));
}
// 获取查询条件:精确等
for(int i=0;i<6;i++) {
TYPE[i] = request.getParameter("TYPE"+(i+1));
}
// 获取写的内容
for(int i=0;i<6;i++) {
SearchBox[i] = request.getParameter("SearchBox"+(i+1));
}
String sql= "select * from volunteer where " + select[0] + " " + TYPE[0];
if(TYPE[0].equals("=")) {
sql += " '"+SearchBox[0]+"'";
}else {
sql += " '%"+SearchBox[0]+"%'";
}
int length = 0;
for(int i=0;type[i]!=null;i++,length++) {
}
for(int i=0;i<length;i++) {
sql = sql +" ";
if(type[i].equals("not like")) {
sql += " and " + select[i+1]+" "+type[i]+" ";
}else{
sql += type[i]+" "+select[i+1]+" "+TYPE[i+1]+" ";
} if(TYPE[i+1].equals("=")) {
sql += " '"+SearchBox[i+1]+"'";
}else {
sql += " '%"+SearchBox[i+1]+"%'";
}
}
System.out.println(sql);
List<Volunteer> list = Dao.Search(sql);
if(list.size()!=0) {
request.setAttribute("list", list);
request.getRequestDispatcher("search1.jsp").forward(request, response);
}else {
request.setAttribute("message", "不存在符号该条件的志愿者");
request.getRequestDispatcher("search1.jsp").forward(request, response);
} }
// 通过单条件查询
private void searchAtName(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
request.setCharacterEncoding("utf-8");
String name = request.getParameter("name");
Volunteer volunteer = Dao.searchAtName(name);
if(volunteer!=null) {
request.setAttribute("volunteer", volunteer);
request.getRequestDispatcher("searchResult.jsp").forward(request, response);
}
} }

DBUtil层

package DBUtil;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException; public class Util {
// 获取连接
// 获取连接方法
public static Connection getConnection() {
String driver = "com.mysql.jdbc.Driver";
String url = "jdbc:mysql://localhost:3306/tree?useSSL=false&useUnicode=true&characterEncoding=utf8";
String username = "root";
String password = "a3685371";
Connection con = null;
try {
Class.forName(driver);
con = DriverManager.getConnection(url,username,password);
}catch(Exception e) {
throw new RuntimeException(e);
}
return con;
}
// 释放资源 public static void release(Connection con,PreparedStatement ps) {
if(ps!=null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(con!=null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
} }

Dao层

package Dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List; import org.junit.Test; import Bin.Tree;
import Bin.Volunteer;
import DBUtil.Util;
public class Dao {
// 通过多条件查询
public static List<Volunteer> Search(String SQL){
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
List<Volunteer> list = new ArrayList<Volunteer>();
try {
// 获取连接
con = Util.getConnection();
// 编写sql语句
String sql = SQL;
// 执行sql语句
ps = con.prepareStatement(sql);
// 执行查询操作
rs = ps.executeQuery();
while(rs.next()) {
Volunteer volunteer = new Volunteer();
volunteer.setName(rs.getString(1));
volunteer.setSex(rs.getString(2));
volunteer.setMinzu(rs.getString(3));
volunteer.setZhengzhi(rs.getString(4));
list.add(volunteer);
}
return list;
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(rs!=null) {
rs.close();
}
Util.release(con, ps);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
// 通过名字查询
public static Volunteer searchAtName(String name) {
Connection con = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 获取连接
con = Util.getConnection();
// 编写sql语句
String sql = "select * from volunteer where name = ?";
// 执行sql语句
ps = con.prepareStatement(sql);
// 设置参数
ps.setString(1, name);
// 执行查询操作
rs = ps.executeQuery();
while(rs.next()) {
Volunteer volunteer = new Volunteer();
volunteer.setName(rs.getString(1));
volunteer.setSex(rs.getString(2));
volunteer.setMinzu(rs.getString(3));
volunteer.setZhengzhi(rs.getString(4));
volunteer.setFuwu(rs.getString(5));
volunteer.setTime(rs.getString(6));
return volunteer;
}
} catch (SQLException e) {
e.printStackTrace();
}
try {
if(rs!=null) {
rs.close();
}
Util.release(con, ps);
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}
}

数据库:

运行结果: 

 

 

 

总结:关键还是在于sql语句的拼接和动态添加条件。由于六级的到来,让我对JAVA有点忽略了,现在赶快补上。

如果有大佬发现错误或者更好的方法,请留言支持,向您学习!!!!

  

多条件查询----补发周一内容(六级让我忽略了JAVA)的更多相关文章

  1. 03_MyBatis基本查询,mapper文件的定义,测试代码的编写,resultMap配置返回值,sql片段配置,select标签标签中的内容介绍,配置使用二级缓存,使用别名的数据类型,条件查询ma

     1 PersonTestMapper.xml中的内容如下: <?xmlversion="1.0"encoding="UTF-8"?> < ...

  2. Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)

    为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了.但是只支持了一些简单的.常用的条件查询,支持的力度很有限.特别是遇到对聚合对象的查询时,就不能再使用 ...

  3. 【Java EE 学习 17 下】【数据库导出到Excel】【多条件查询方法】

    一.导出到Excel 1.使用DatabaseMetaData分析数据库的数据结构和相关信息. (1)测试得到所有数据库名: private static DataSource ds=DataSour ...

  4. Hibernate条件查询

    设计上可以灵活的根据 Criteria 的特点来方便地进行查询条件的组装.现在对 Hibernate的Criteria 的用法进行总结:Hibernate 设计了 CriteriaSpecificat ...

  5. php 条件查询和多条件查询

    条件循环 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3 ...

  6. php部分---对数据的多条件查询,批量删除

    1.给多条件查询,添加条件 <h1>新闻信息查看</h1> <?php $tiaojian1=" 1=1"; $tiaojian2=" 1= ...

  7. Ext4.2 grid 条件查询使用

    项目中用到Ext4.2,初次接触,用的不是太熟,做个总结,恳请指正! 1.grid重新设置条件,查询结果不是从第1页开始 在处理grid条件查询时,点击搜索按钮调用store.load()方法时,会把 ...

  8. [转]NHibernate之旅(4):探索查询之条件查询(Criteria Query)

    本节内容 NHibernate中的查询方法 条件查询(Criteria Query) 1.创建ICriteria实例 2.结果集限制 3.结果集排序 4.一些说明 根据示例查询(Query By Ex ...

  9. ecshop后台根据条件查询后不填充table 返回的json数据,content为空?

    做ecshop后台开发的时,根据条件查询后,利用ajax返回的content json数据内容为空,没有填充table 效果 预期效果 问题: make_json_result($smarty -&g ...

随机推荐

  1. go ---变量数据结构调试利器 go-spew

    我们在使用Golang(Go语言)开发的过程中,会通过经常通过调试的方式查找问题的原因,解决问题,尤其是当遇到一个很棘手的问题的时候,就需要知道一段代码在执行的过程中,其上下文的变量对应的数据,以便进 ...

  2. ServletContextInitializer添加 servlet filter listener

    ServletContextInitializer添加 servlet filter listener https://www.cnblogs.com/pomer-huang/p/9639322.ht ...

  3. python 2.django的镜像安装与第一次项目创建-运行以及app创建

    django的设计模式 Django是一个遵循MVC设计模式的框架,MVC是Model.View.Controller的三个单词的简写.分别代表模型.视图.控制器. 而Django也是是一个MTV的设 ...

  4. python-pymysql防止sql注入攻击介绍

    目录 pymysql sql 注入攻击 调用存储过程 pymysql pymysql 是一个第三方模块,帮我们封装了 建立表/用户认证/sql的执行/结果的获取 import pymysql # 步骤 ...

  5. LRU(Least Recently Used)算法的理解

    https://blog.csdn.net/wydyd110/article/details/84023688 感谢 ,自己学习记笔记 内存里建立一个哈希表,后来数据多了,爆了.咋整呢? 一个算法,就 ...

  6. js节流与防抖函数封装

    js节流与防抖函数封装 常见应用场景: window的 resize 和 scroll 事件: 文字输入时的 keyup 事件: 元素拖拽.移动时的 mousemove 事件: 防抖 定义:多次触发事 ...

  7. Oracle队列实现

    Oracle队列实现 -- 核心技术点:for update 创建测试表 create table t ( id       number primary key, processed_flag va ...

  8. 【转】StackTraceElement获取方法调用栈的信息

    本文链接:https://blog.csdn.net/hp910315/article/details/52702199 一.什么是StackTrace StackTrace(堆栈轨迹)存放的就是方法 ...

  9. 直播知识-推流&拉流

    推流,指的是把采集阶段封包好的内容传输到服务器的过程.其实就是将现场的视频信号传到网络的过程.“推流”对网络要求比较高,如果网络不稳定,直播效果就会很差,观众观看直播时就会发生卡顿等现象,观看体验很是 ...

  10. 【DATAGUARD】物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置

    [DATAGUARD]物理dg配置客户端无缝切换 (八.2)--Fast-Start Failover 的配置 一.1  BLOG文档结构图       一.2  前言部分   一.2.1  导读 各 ...