java
  • jsp
  • jdbc
  • 2010-02-05 49 views 1 likes 
    1

    我有一个查询用于提取有关用户的用户名和信息。在Access中,我有LIKE函数,以便用户不必输入特定的名称。我现在将它转移到JSP。这是在查询行,我有与JSP的烦恼:试图获取查询以使用LIKE函数和JSP中的变量

    WHERE ObjectName Like '" + "%"+ VariableName + "%" +"'; 
    

    查询运行正常,但不显示,即使我把整个名称的任何信息。如果我将其更改为:

    WHERE ObjectName = '" + VariableName +"'; 
    

    它的工作原理,但我想给用户一个机会,不得不把在部分名称的情况下,他们不知道如何拼写的姓名或典型EIT错误的能力。任何帮助将被认识。

    感谢

    回答

    2

    还有你的线是一个有点古怪,但语法有效。所以问题在于别的地方。 variableName究竟包含什么?

    也就是说,您不应该在JSP文件中编写原始Java代码。在Java类中这样做。您可以使用Servlet类来预处理或后处理请求。还要抢PreparedStatement以避免SQL injections。这里有一个开球例如:

    public List<User> search(String username) throws SQLException { 
        Connection connection = null; 
        PreparedStatement statement = null; 
        ResultSet resultSet = null; 
        List<User> users = new ArrayList<User>(); 
    
        try { 
         connection = database.getConnection(); 
         statement = connection.prepareStatement("SELECT id, username, age, email FROM user WHERE username LIKE ?"); 
         statement.setString(1, "%" + username + "%"); 
         resultSet = statement.executeQuery(); 
         while (resultSet.next()) { 
          users.add(mapUser(resultSet)); 
         } 
        } finally { 
         close(connection, statement, resultSet); 
        } 
    
        return users; 
    } 
    
    1
    1. 避免在JSP中编写
    2. SQL查询
    3. "SELECT * FROM something WHERE ObectName LIKE '%" + VariableName + "%'"应该工作
    1

    这是启动用户 我正在创建一个名称ASHRAF数据的基础上的答案,那么我创建名字现金表。下面

    CREATE TABLE CASH(NO INT NOT NULL PRIMARY KEY AUTO_INCREMENT,NAME VARCHAR(50) NOT NULL,ADDRESS VARCHAR(100),PET_NAME VARCHAR(50),PLACE VARCHAR(50),TYPE VARCHAR(20),TYPE_OF_PAY VARCHAR(20),AMOUNT INT(6) NOT NULL); 
    

    这里的代码给出NO是自动递增的蚂蚁是主键反正你可以使用我下面

    上午在这里搜索给出了使用两个名称地址JSP代码搜索,从表中的内容可以使用HTML页面和一个servlet

    HTML页面(show.html)我创建下面

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    <html> 
    <head> 
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    <title>show.html</title> 
    </head> 
    <body> 
    <h1><b><font color=020202>SHOW</font></b></h1><br><br> 
        <form name="f6" action="getshow" method="POST" onsubmit="return check(this)"> 
        <table border="0"> 
        <tr> 
        <td>Name :</td><td><input type="text" name="name"></td> 
        </tr> 
        <tr> 
        <td>House Name :</td><td><input type="text" name="address"></td> 
        </tr> 
        <tr> 
        <td><br><input type="SUBMIT" value="submit"></td> 
        </tr> 
        </table> 
        </form> 
    </body> 
    </html> 
    

    该servlet给出的(克传递参数etshow.java)以下

    package Servlets; 
    
    
    
    import java.io.IOException; 
    
    
    
    import javax.servlet.RequestDispatcher; 
    
    
    
    import javax.servlet.ServletException; 
    
    
    
    import javax.servlet.http.HttpServlet; 
    
    
    
    import javax.servlet.http.HttpServletRequest; 
    
    
    
    import javax.servlet.http.HttpServletResponse; 
    
    
    
    /** 
    
    
    
    * Servlet implementation class getdata 
    
    
    
    */ 
    
    
    
    public class getshow extends HttpServlet { 
    
    
        private static final long serialVersionUID = 1L; 
    
    
        /** 
    
        * @see HttpServlet#HttpServlet() 
    
        */ 
    
        public getshow() { 
    
         super(); 
    
         // TODO Auto-generated constructor stub 
    
        } 
    
    
        /** 
    
        * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
    
        */ 
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) 
    `` throws ServletException, IOException { 
    
    
         // TODO Auto-generated method stub 
    
        } 
    
    
        /**` 
    
        * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse 
    ``response) 
    
    
        */ 
    
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    
         // TODO Auto-generated method stub 
    
         try{ 
    
         String url=null; 
    
         String s1=request.getParameter("name"); 
    
         String s2=request.getParameter("address"); 
    
    
         request.setAttribute("name",s1); 
    
    
    
         request.setAttribute("address",s2); 
    
    
          url="show.jsp"; 
    
         RequestDispatcher view=request.getRequestDispatcher(url); 
    
         view.forward(request, response); 
    
        } catch (Exception e) { 
    
         // TODO Auto-generated catch block 
    
         e.printStackTrace(); 
    
        } 
    
        } 
    
    
    } 
    

    JSP文件是(show.jsp)以下

    <%@ page language="java" contentType="text/html; charset=UTF-8" 
    
    
        pageEncoding="UTF-8"%> 
    
    
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
    
    
    
    <html> 
    
    
    
    <head>` 
    
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> 
    
    
    
    <title>show.jsp</title> 
    
    
    
    </head> 
    
    
    
    <body> 
    
    
    
    <%String aid=(String)request.getAttribute("name"); %> 
    
    
    
    <%String sid=(String)request.getAttribute("address"); %> 
    
    
    
    
    
        <% 
    
    
    
    
         Connection con=null; 
    
         ResultSet rs=null; 
    
         String records=null; 
    
         StringBuffer appender=new StringBuffer(); 
    
         java.sql.PreparedStatement st=null; 
    
         try { 
    
          Class.forName("com.mysql.jdbc.Driver").newInstance(); 
    
          con=DriverManager.getConnection("jdbc:mysql://localhost/ASHRAF?user=root&password=password"); 
    
          st=con.prepareStatement("select *from CASH where NAME like '" + aid + "%" +"' and ADDRESS like '" + sid + "%" +"'"); 
    
          rs=st.executeQuery(); 
    
    
          %> 
    
        <center><TABLE cellpadding="15" border="2"> 
    
        <TR> 
    
    
    <TH>NO</TH> 
    
    
    
    <TH>NAME</TH> 
    
    
    
    <TH>HOUSE NAME</TH> 
    
    
    
    <TH>PET NAME</TH> 
    
    
    
    <TH>PLACE</TH> 
    
    
    
    <TH>TYPE OF OCCATION</TH> 
    
    
    
    <TH>TYPE OF PAY</TH> 
    
    
    
    <TH>AMOUNT</TH> 
    
    
    
    </TR> 
    
    
    
    <% 
    
    
    
    while (rs.next()) { 
    
    
    
    %> 
    
    
    
    <TR> 
    
    
    
    <TD><%=rs.getString(1)%></TD> 
    
    
    
    <TD><%=rs.getString(2)%></TD> 
    
    
    
    <TD><%=rs.getString(3)%></TD> 
    
    
    
    <TD><%=rs.getString(4)%></TD> 
    
    
    
    <TD><%=rs.getString(5)%></TD> 
    
    
    
    <TD><%=rs.getString(6)%></TD> 
    
    
    
    <TD><%=rs.getString(7)%></TD> 
    
    
    
    <TD><%=rs.getString(8)%></TD> 
    
    
    
    </TR> 
    
    
    
    <% } %> 
    
    
    
    </TABLE> 
    
    
    
    </center> 
    
    
    
    </div> 
    
    
    
    <% 
    
    
        } catch (Exception e) { 
    
        // TODO Auto-generated catch block 
    
        e.printStackTrace(); 
    
    
    } 
    
    
    
    finally 
    
    
    
    { 
    
    
        try { 
    
         con.close(); 
    
        } catch (SQLException e) { 
    
         // TODO Auto-generated catch block 
    
         e.printStackTrace(); 
    
        } 
    
    
    } %> 
    
    
    
    </body> 
    
    
    
    </html> 
    

    给定的,现在你可以使用名称,也没有与地址或同时进行搜索。

    +0

    要做到这一点很有用,您需要返回并做一些重大的重新格式化...原来,您的“答案”是无法读取的。 – 2013-04-08 15:54:47

    相关问题