//第一个类 这个类用于调用类和方法和接收参数
public class SearchData extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String search = request.getParameter(“table_search”);
if(!search.equals("")) {//判断是否是空串
FindDao dao = new FindDao();//调用我封装的数据库查询类下面有写
List list = dao.search(search);//调用我封装的数据库查询类的search方法 里面传递一个参数
//System.out.println(list);
Context context = new Context();//实例化thymeleaf容器 这个工具类也是封装完的 这里就不展示了
context.setVariable(“list”, list);//把list赋值给"list" “list"用于前端渲染
ThUtils.print(“pages/tables/simple.html”, context, response);//指定要渲染的页面,并且把装数据容器也带过去页面
//System.out.println(search);
}else {
response.sendRedirect(request.getContextPath()+”/HomeServlet");//判断为空串 则返回到主页面
}
}
}
public class FindDao {//这个类负责封装数据库的业务逻辑
public List search(String info){//方法返回一个实例类
List list = new ArrayList<>();//启用一个集合
try (Connection conn = DBUtils.getConn()) {//连接数据库 DBUtils已封装为工具类 启动数据库使用
String sql = “select * from info where user like CONCAT(’%’,?,’%’) or time like CONCAT(’%’,?,’%’) or status like CONCAT(’%’,?,’%’) or message like CONCAT(’%’,?,’%’)”;//模糊查询数据的方法 这里有个漏洞 无法按ID查询
PreparedStatement ps = conn.prepareStatement(sql);//调用PreparedStatement 防止sql注入
ps.setString(1,info);//设置值替代问号
ps.setString(2,info);
ps.setString(3,info);
ps.setString(4,info);
ResultSet rs = ps.executeQuery();//执行sql语句
while(rs.next()) {//判断是否能查询到数据
int id = rs.getInt(“id”);//查到数据则给变量赋值
String user = rs.getString(“user”);
String time = rs.getString(“time”);
String status = rs.getString(“status”);
String message = rs.getString(“message”);
Search search = new Search(id,user,time,status,message);//调用实体类,给实体类赋值
list.add(search);//实体类再赋值给List集合
}
} catch (Exception e) {
e.printStackTrace();
}
return list; //将集合中的结果返回
}
}
ID | 用户 | 时间 | 状态 | 留言 |
---|---|---|---|---|
183 | John Doe | 11-7-2014 | Approved | Bacon ipsum dolor sit amet salami venison chicken flank fatback doner. |