java留言管理系统中模糊查询实例分享

本文分享了一个基于MVC+DAO的留言管理系统,包含增删改查,其中查询,有全部查询和按关键字进行模糊查询的功能,具体内容如下
NoteDAO.Java

package cn.mldn.lxh.note.dao ; 

import java.util.* ;
import cn.mldn.lxh.note.vo.* ; 

public interface NoteDAO
{
  // 增加操作
  public void insert(Note note) throws Exception ;
  // 修改操作
  public void update(Note note) throws Exception ;
  // 删除操作
  public void delete(int id) throws Exception ;
  // 按ID查询,主要为更新使用
  public Note queryById(int id) throws Exception ;
  // 查询全部
  public List queryAll() throws Exception ;
  // 模糊查询
  public List queryByLike(String cond) throws Exception ;
};

NoteDAOImpl.java

package cn.mldn.lxh.note.dao.impl ; 

import java.sql.* ;
import java.util.* ;
import cn.mldn.lxh.note.vo.* ;
import cn.mldn.lxh.note.dao.* ;
import cn.mldn.lxh.note.dbc.* ; 

public class NoteDAOImpl implements NoteDAO
{
  // 增加操作
  public void insert(Note note) throws Exception
  {
    String sql = "INSERT INTO note(id,title,author,content) VALUES(note_sequ.nextVal,?,?,?)" ;
    PreparedStatement pstmt = null ;
    DataBaseConnection dbc = null ;
    dbc = new DataBaseConnection() ;
    try
    {
      pstmt = dbc.getConnection().prepareStatement(sql) ;
      pstmt.setString(1,note.getTitle()) ;
      pstmt.setString(2,note.getAuthor()) ;
      pstmt.setString(3,note.getContent()) ;
      pstmt.executeUpdate() ;
      pstmt.close() ;
    }
    catch (Exception e)
    {
      // System.out.println(e) ;
      throw new Exception("操作中出现错误!!!") ;
    }
    finally
    {
      dbc.close() ;
    }
  }
  // 修改操作
  public void update(Note note) throws Exception
  {
    String sql = "UPDATE note SET title=?,author=?,content=? WHERE id=?" ;
    PreparedStatement pstmt = null ;
    DataBaseConnection dbc = null ;
    dbc = new DataBaseConnection() ;
    try
    {
      pstmt = dbc.getConnection().prepareStatement(sql) ;
      pstmt.setString(1,note.getTitle()) ;
      pstmt.setString(2,note.getAuthor()) ;
      pstmt.setString(3,note.getContent()) ;
      pstmt.setInt(4,note.getId()) ;
      pstmt.executeUpdate() ;
      pstmt.close() ;
    }
    catch (Exception e)
    {
      throw new Exception("操作中出现错误!!!") ;
    }
    finally
    {
      dbc.close() ;
    }
  }
  // 删除操作
  public void delete(int id) throws Exception
  {
    String sql = "DELETE FROM note WHERE id=?" ;
    PreparedStatement pstmt = null ;
    DataBaseConnection dbc = null ;
    dbc = new DataBaseConnection() ;
    try
    {
      pstmt = dbc.getConnection().prepareStatement(sql) ;
      pstmt.setInt(1,id) ;
      pstmt.executeUpdate() ;
      pstmt.close() ;
    }
    catch (Exception e)
    {
      throw new Exception("操作中出现错误!!!") ;
    }
    finally
    {
      dbc.close() ;
    }
  }
  // 按ID查询,主要为更新使用
  public Note queryById(int id) throws Exception
  {
    Note note = null ;
    String sql = "SELECT id,title,author,content FROM note WHERE id=?" ;
    PreparedStatement pstmt = null ;
    DataBaseConnection dbc = null ;
    dbc = new DataBaseConnection() ;
    try
    {
      pstmt = dbc.getConnection().prepareStatement(sql) ;
      pstmt.setInt(1,id) ;
      ResultSet rs = pstmt.executeQuery() ;
      if(rs.next())
      {
        note = new Note() ;
        note.setId(rs.getInt(1)) ;
        note.setTitle(rs.getString(2)) ;
        note.setAuthor(rs.getString(3)) ;
        note.setContent(rs.getString(4)) ;
      }
      rs.close() ;
      pstmt.close() ;
    }
    catch (Exception e)
    {
      throw new Exception("操作中出现错误!!!") ;
    }
    finally
    {
      dbc.close() ;
    }
    return note ;
  }
  // 查询全部
  public List queryAll() throws Exception
  {
    List all = new ArrayList() ;
    String sql = "SELECT id,title,author,content FROM note" ;
    PreparedStatement pstmt = null ;
    DataBaseConnection dbc = null ;
    dbc = new DataBaseConnection() ;
    try
    {
      pstmt = dbc.getConnection().prepareStatement(sql) ;
      ResultSet rs = pstmt.executeQuery() ;
      while(rs.next())
      {
        Note note = new Note() ;
        note.setId(rs.getInt(1)) ;
        note.setTitle(rs.getString(2)) ;
        note.setAuthor(rs.getString(3)) ;
        note.setContent(rs.getString(4)) ;
        all.add(note) ;
      }
      rs.close() ;
      pstmt.close() ;
    }
    catch (Exception e)
    {
      System.out.println(e) ;
      throw new Exception("操作中出现错误!!!") ;
    }
    finally
    {
      dbc.close() ;
    }
    return all ;
  }
  // 模糊查询
  public List queryByLike(String cond) throws Exception
  {
    List all = new ArrayList() ;
    String sql = "SELECT id,title,author,content FROM note WHERE title LIKE ? or AUTHOR LIKE ? or CONTENT LIKE ?" ;
    PreparedStatement pstmt = null ;
    DataBaseConnection dbc = null ;
    dbc = new DataBaseConnection() ;
    try
    {
      pstmt = dbc.getConnection().prepareStatement(sql) ;
      pstmt.setString(1,"%"+cond+"%") ;
      pstmt.setString(2,"%"+cond+"%") ;
      pstmt.setString(3,"%"+cond+"%") ;
      ResultSet rs = pstmt.executeQuery() ;
      while(rs.next())
      {
        Note note = new Note() ;
        note.setId(rs.getInt(1)) ;
        note.setTitle(rs.getString(2)) ;
        note.setAuthor(rs.getString(3)) ;
        note.setContent(rs.getString(4)) ;
        all.add(note) ;
      }
      rs.close() ;
      pstmt.close() ;
    }
    catch (Exception e)
    {
      System.out.println(e) ;
      throw new Exception("操作中出现错误!!!") ;
    }
    finally
    {
      dbc.close() ;
    }
    return all ;
  }
};

NoteServlet.java

package cn.mldn.lxh.note.servlet ; 

import java.io.* ;
import javax.servlet.* ;
import javax.servlet.http.* ;
import cn.mldn.lxh.note.factory.* ;
import cn.mldn.lxh.note.vo.* ; 

public class NoteServlet extends HttpServlet
{
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
    this.doPost(request,response) ;
  }
  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
    request.setCharacterEncoding("GB2312") ;
    String path = "errors.jsp" ;
    // 接收要操作的参数值
    String status = request.getParameter("status") ;
    if(status!=null)
    {
      // 参数有内容,之后选择合适的方法
      // 查询全部操作
      if("selectall".equals(status))
      {
        try
        {
          request.setAttribute("all",DAOFactory.getNoteDAOInstance().queryAll()) ;
        }
        catch (Exception e)
        {
        }
        path = "list_notes.jsp" ;
      }
      // 插入操作
      if("insert".equals(status))
      {
        // 1、接收插入的信息
        String title = request.getParameter("title") ;
        String author = request.getParameter("author") ;
        String content = request.getParameter("content") ;
        // 2、实例化VO对象
        Note note = new Note() ;
        note.setTitle(title) ;
        note.setAuthor(author) ;
        note.setContent(content) ;
        // 3、调用DAO完成数据库的插入操作
        boolean flag = false ;
        try
        {
          DAOFactory.getNoteDAOInstance().insert(note) ;
          flag = true ;
        }
        catch (Exception e)
        {}
        request.setAttribute("flag",new Boolean(flag)) ;
        path = "insert_do.jsp" ;
      }
      // 按ID查询操作,修改之前需要将数据先查询出来
      if("selectid".equals(status))
      {
        // 接收参数
        int id = 0 ;
        try
        {
          id = Integer.parseInt(request.getParameter("id")) ;
        }
        catch(Exception e)
        {}
        try
        {
          request.setAttribute("note",DAOFactory.getNoteDAOInstance().queryById(id)) ;
        }
        catch (Exception e)
        {
        }
        path = "update.jsp" ;
      }
      // 更新操作
      if("update".equals(status))
      {
        int id = 0 ;
        try
        {
          id = Integer.parseInt(request.getParameter("id")) ;
        }
        catch(Exception e)
        {}
        String title = request.getParameter("title") ;
        String author = request.getParameter("author") ;
        String content = request.getParameter("content") ;
        Note note = new Note() ;
        note.setId(id) ;
        note.setTitle(title) ;
        note.setAuthor(author) ;
        note.setContent(content) ;
        boolean flag = false ;
        try
        {
          DAOFactory.getNoteDAOInstance().update(note) ;
          flag = true ;
        }
        catch (Exception e)
        {}
        request.setAttribute("flag",new Boolean(flag)) ;
        path = "update_do.jsp" ;
      }
      // 模糊查询
      if("selectbylike".equals(status))
      {
        String keyword = request.getParameter("keyword") ;
        try
        {
          request.setAttribute("all",DAOFactory.getNoteDAOInstance().queryByLike(keyword)) ;
        }
        catch (Exception e)
        {
        }
        path = "list_notes.jsp" ;
      }
      // 删除操作
      if("delete".equals(status))
      {
        // 接收参数
        int id = 0 ;
        try
        {
          id = Integer.parseInt(request.getParameter("id")) ;
        }
        catch(Exception e)
        {}
        boolean flag = false ;
        try
        {
          DAOFactory.getNoteDAOInstance().delete(id) ;
          flag = true ;
        }
        catch (Exception e)
        {}
        request.setAttribute("flag",new Boolean(flag)) ;
        path = "delete_do.jsp" ;
      }
    }
    else
    {
      // 则表示无参数,非法的客户请求
    }
    request.getRequestDispatcher(path).forward(request,response) ;
  }
};
/*
 <servlet>
  <servlet-name>note</servlet-name>
  <servlet-class>cn.mldn.lxh.note.servlet.NoteServlet</servlet-class>
 </servlet>
 <servlet-mapping>
  <servlet-name>note</servlet-name>
  <url-pattern>/note/note_mvc/Note</url-pattern>
 </servlet-mapping>
*/

list_notes.jsp

<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.util.*"%>
<%@ page import="cn.mldn.lxh.note.vo.*"%>
<html>
<head>
  <title>MVC+DAO 留言管理程序——登陆</title>
</head>
<body>
<center>
  <h1>留言管理范例 —— MVC + DAO实现</h1>
  <hr>
  <br>
  <%
    // 编码转换
    request.setCharacterEncoding("GB2312") ;
    if(session.getAttribute("uname")!=null)
    {
      // 用户已登陆
  %>
  <%
    // 如果有内容,则修改变量i,如果没有,则根据i的值进行无内容提示
    int i = 0 ;
    String keyword = request.getParameter("keyword") ;
    List all = null ;
    all = (List)request.getAttribute("all") ;
  %>
<form action="Note" method="POST">
  请输入查询内容:<input type="text" name="keyword">
  <input type="hidden" name="status" value="selectbylike">
  <input type="submit" value="查询">
</form>
</h3><a href="insert.jsp">添加新留言</a></h3>
<table width="80%" border="1">
  <tr>
    <td>留言ID</td>
    <td>标题</td>
    <td>作者</td>
    <td>内容</td>
    <td>删除</td>
  </tr>
  <%
      Iterator iter = all.iterator() ;
      while(iter.hasNext())
      {
        Note note = (Note)iter.next() ;
        i++ ;
        // 进行循环打印,打印出所有的内容,以表格形式
        // 从数据库中取出内容
        int id = note.getId() ;
        String title = note.getTitle() ;
        String author = note.getAuthor() ;
        String content = note.getContent() ; 

        // 因为要关键字返红,所以此处需要接收查询关键字
        // String keyword = request.getParameter("keyword") ;
        if(keyword!=null)
        {
          // 需要将数据返红
          title = title.replaceAll(keyword,"<font color=\"red\">"+keyword+"</font>")  

;
          author = author.replaceAll(keyword,"<font color=\"red\">"+keyword 

+"</font>") ;
          content = content.replaceAll(keyword,"<font color=\"red\">"+keyword 

+"</font>") ;
        }
  %>
        <tr>
          <td><%=id%></td>
          <td><a href="Note?id=<%=id%>&status=selectid"><%=title%></a></td>
          <td><%=author%></td>
          <td><%=content%></td>
          <td><a href="Note?id=<%=id%>&status=delete">删除</a></td>
        </tr>
  <%
      }
      // 判断i的值是否改变,如果改变,则表示有内容,反之,无内容
      if(i==0)
        {
      // 进行提示
  %>
        <tr>
          <td colspan="5">没有任何内容!!!</td>
        </tr>
  <%
      }
  %>
</table> 

  <%
    }
    else
    {
      // 用户未登陆,提示用户登陆,并跳转
      response.setHeader("refresh","2;URL=login.jsp") ;
  %>
      您还未登陆,请先登陆!!!<br>
      两秒后自动跳转到登陆窗口!!!<br>
      如果没有跳转,请按<a href="login.jsp">这里</a>!!!<br>
  <%
    }
  %>
</center>
</body>
</html>

以上就是本文的全部内容,希望对大家的学习有所帮助。

(0)

相关推荐

  • Java模糊查询方法详解

    当我们需要开发一个方法用来查询数据库的时候,往往会遇到这样一个问题:就是不知道用户到底会输入什么条件,那么怎么样处理sql语句才能让我们开发的方法不管接受到什么样的条件都可以正常工作呢?这时where '1'='1'加上list就可以完美解决这个问题了,废话少说,上代码: // 模糊查询方法 public List<person> query() { List<person> list = new ArrayList<>(); Connection con = null

  • 在java List中进行模糊查询的实现方法

    比如我有下面这样一个List,里面存放的是多个Employee对象.然后我想对这个List进行按照Employee对象的名字进行模糊查询.有什么好的解决方案么? 比如我输入的查询条件为"wang",那么应该返回只包含employee1的List列表. List list = new ArrayList(); Employee employee1 = new Employee(); employee1.setName("wangqiang"); employee1.s

  • java留言管理系统中模糊查询实例分享

    本文分享了一个基于MVC+DAO的留言管理系统,包含增删改查,其中查询,有全部查询和按关键字进行模糊查询的功能,具体内容如下 NoteDAO.Java package cn.mldn.lxh.note.dao ; import java.util.* ; import cn.mldn.lxh.note.vo.* ; public interface NoteDAO { // 增加操作 public void insert(Note note) throws Exception ; // 修改操作

  • js模糊查询实例分享

    首先要明白什么是模糊查询(废话又来了),就是根据关键字把列表中符合关键字的一项或某项罗列出来,也就是要检查列表的每一项中是否含有关键字,因此抽象一下就是一个字符串中是否含有某个字符或者字符串. 以下例子没有接触到后台数据的知识,只是查询当前表格中每一行所包含的关键字. 用到的方法为:string.indexOf(''); 找出字符串中某个字符的位置,而如果没有目标字符会返回-1. 实现代码: <meta charset="UTF-8"> <title></

  • Django分组聚合查询实例分享

    多表查询 1. 增删改 一对多:先一后多,外键可以为对象或依赖表的主键(publish and book) publish = Publish.objects.create() Book.objects.create(....publish=publish|publish_id=publish.id) 删: 默认存在级联删除 改: book修改外键,外键一定存在 多对多: 关系表的获取(book(主键) and author) book.author 增:book.author.add(作者对象

  • SqlServer中模糊查询对于特殊字符的处理方法

    今天在处理sql查询的时候遇到了like查询不到的问题,于是对问题进行剖析 问题: select * from v_workflow_rt_task_circulate where Name like '%[admin]请假申请[2017-02-13至2017-02-13]%' 查询不到,但是在数据库中是存在在这一条数据的. 修改后: select * from v_workflow_rt_task_circulate where Name like '%[[]admin]请假申请[[]2017

  • mysql中模糊查询的四种用法介绍

    下面介绍mysql中模糊查询的四种用法: 1,%:表示任意0个或多个字符.可匹配任意类型和长度的字符,有些情况下若是中文,请使用两个百分号(%%)表示. 比如 SELECT * FROM [user] WHERE u_name LIKE '%三%' 将会把u_name为"张三","张猫三"."三脚猫","唐三藏"等等有"三"的记录全找出来. 另外,如果需要找出u_name中既有"三"又有

  • PHP中模糊查询并关联三个select框

    1.在php中我们经常用到下拉框,并相互关联,如果下拉框的option非常多,那么我们就要用到模糊搜索功能,那么怎么做呢? 在此功能中,走了弯路,最好不要关联两个select的id值后select属性选中,并不可修改.再次选择的时候去除属性,这样在去除select属性的时候存在火狐和google js兼容的问题.很容易出现不对应或者属性不能去除的情况,且功能麻烦.另外在后台一定要判断两者的对应关系.(在后台比对两者的对应关系的时候,要去数据库查询,找到企业的id,去数据库查询担保公司的id比对.

  • jQuery的时间datetime控件在AngularJs中的使用实例(分享)

    百度一下,自己也想了一下,有一种简单,无脑的方式分享给你: <input ng-model="start" id="start" placeholder="开始日期" style="width:156px;" class="form-control date-picker" data-date-format="yyyy-mm-dd" type="text">

  • Java生产1-100的随机数简单实例(分享)

    直接调用Math里面的random即可,简单方便 int i = (int)(Math.random()*100+1); 以上这篇Java生产1-100的随机数简单实例(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.

  • java 查找list中重复数据实例详解

    java 查找list中重复数据实例详解 需求: 查找一个List集合中所有重复的数据,重复的数据可能不止一堆,比如:aa, bb, aa, bb, cc , dd, aa这样的数据.如果有重复数据,则给这些重复数据加上编号,上述数据改为:aa1, bb1, aa2, bb2, cc, dd. 算法如下: public static void same(List<String> list) { String [] indexArr ; Map<String, String> map

  • thinkphp实现like模糊查询实例

    本文实例讲述了thinkphp实现like模糊查询的方法,分享给大家供大家参考.具体实现方法如下: 目前使用thinkphp框架进行项目开发的人越来越多了,由于其封装性较好,导致了很多纯PHP开发的部分不易上手,本文实例即以like模糊查询为例对此加以说明. 这里主要通过举例来说明用法: ThinkPHP可以支持直接使用字符串作为查询条件,但是大多数情况推荐使用索引数组或者对象来作为查询条件,因为会更加安全. 一.使用字符串作为查询条件 这是最传统的方式,但是安全性不高, 例如: 复制代码 代码

随机推荐