从数据库中搜索 java servlet

Posted

技术标签:

【中文标题】从数据库中搜索 java servlet【英文标题】:Search from database java servlet 【发布时间】:2014-12-29 10:31:00 【问题描述】:

我正在尝试创建一个 servlet,我可以在其中添加、删除和搜索客户,现在我被搜索方法卡住了,我不确定为什么我的方法不起作用,但这是我迄今为止创建的代码。我正在使用带有以下方法的 DAO 模式按姓名和姓氏过滤客户:

public List<Customers> filterCustomer(String name)

    List<Customers> customers = new ArrayList<Customers>();

    try
        st = getConnection().createStatement();     
        rs = st.executeQuery("SELECT * from customer where first_name  like '%" + name + "%'"
                + "and surname like '%" + name+ "%'");
        while(rs.next())
        
            Customers customer = new Customers();
            customer.setId(rs.getInt(1));
            customer.setFirst_name(rs.getString(2));
            customer.setSurname(rs.getString(3));
            customer.setCode(rs.getString(4));

            customers.add(customer);


        

首先在 servlet 中创建客户列表以将其打印出来,但如果 searchString 参数不为空,那么我想创建与 searchString 匹配的这些客户的新列表。这是我创建的 servlet 部分:

out.print("<form method=\"get\" action =\"" + request.getContextPath() +"/Search\" >"
    + "<input id='searchStringBox' name='searchString'/>"
    + "<input type='submit' value='Filtreeri'>");
CustomerDao dao = new CustomerDao();
    List<Customers> customers;
    customers = dao.getAllCustomers();
    String name = request.getParameter("searchString"); 
    if(name != null) 

    customers = dao.filterCustomer(name); 

    out.println("<table id='listTable' class='listTable>'" +
    "<thead><tr><th scope='col'>Nimi</th><th scope='col'>Perekonnanimi</th>"
    +"<th scope='col'>Kood</th><th scope='col'></th></tr></thead>");

    for(Customers customer : customers)
    
        String value3 = String.valueOf(customer.getId());
        request.setAttribute("value3",value3);
        customer.getId();
        out.println(        
    "<tbody><tr> "      
    + "<td>"+ customer.getFirst_name()+" "+"</td>"
    + "<td>"+ customer.getSurname()+" "+"</td>"
    + "<td>"+ customer.getCode()+" " +"</td>"
    + " "+"<td><a href='"+request.getContextPath()+"/Search?id="+value3+"'>Delete</a></td></tr>"                    
     );     

【问题讨论】:

【参考方案1】:

您正在搜索姓名和姓氏之间有共同字符串的客户。例如,如果您搜索“摩西”,您只会找到类似以下的人:

Moses Moses
Moses Mosesson
Moses O'Moses

...等等。它不会找到“Moses Malone”或“Jenny Moses”。

原因是您的条件是 AND 而不是 OR。因此,它会检查姓名和姓氏是否像“%Moses%”一样。

将查询更改为:

"SELECT * from customer where first_name  like '%" + name + "%'"
            + "OR surname like '%" + name+ "%'"

在你确定这可行后,请阅读SQL Injection and how to prevent it。切勿使用来自外部世界(使用您的 servlet 的人或黑客)的参数,而不检查它们是否存在潜在的 SQL 注入。

【讨论】:

谢谢,但你能解释一下“来自外部世界的参数”吗? 我的意思是,源自最终用户的价值观。您无法控制他们将向您的服务器发送什么。这些值来自您自己的机器之外,来自 Internet,因此您应该怀疑它们。

以上是关于从数据库中搜索 java servlet的主要内容,如果未能解决你的问题,请参考以下文章

从 MySQL 数据库中检索数据并使用 java [重复] 在 html 中显示它

servlet 从java中获取参数

我无法使用 JSP - Servlet - DAO 进行搜索

java怎么从servlet中返回数据到ajax中

JAVA servlet 从数据库中获取结果返回给客户端

从 Java GUI 应用程序调用 servlet?