2010-02-05 7 views
1

J'ai une requête qui est utilisée pour tirer les noms d'utilisateur et des informations sur l'utilisateur. Dans Access, j'avais la fonction LIKE pour que l'utilisateur n'ait pas à taper un nom spécifique. Je le transfère maintenant à JSP. Voici la ligne dans la requête que j'ai des problèmes avec JSP:en essayant d'obtenir une requête pour utiliser la fonction LIKE avec une variable dans JSP

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

La requête fonctionne très bien, mais ne montre aucune information, même si je mets dans le nom complet. Si je change à:

WHERE ObjectName = '" + VariableName +"'; 

cela fonctionne, mais je voudrais donner à l'utilisateur une chance d'avoir à la capacité de mettre en noms partiels dans le cas où ils ne savent pas comment épeler le nom ou typ eit incorrectement . Toute aide serait appréciée.

Merci

Répondre

2

La ligne que vous avez montré est un peu bizarre, mais syntaxiquement valide. Donc, le problème se situe ailleurs. Que contient réellement variableName? Cela dit, vous ne devriez pas écrire du code Java brut dans les fichiers JSP. Faites cela dans une classe Java. Vous pouvez utiliser une classe Servlet pour pré-traiter ou post-traiter des demandes. Saisissez également PreparedStatement pour éviter SQL injections. Voici un exemple de coup d'envoi:

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. Évitez d'écrire des requêtes SQL dans JSP
  2. "SELECT * FROM something WHERE ObectName LIKE '%" + VariableName + "%'" devrait travailler
1

Ceci est une réponse pour les utilisateurs à partir je suis créé une base de données dans un nom ASHRAF, puis je crée une table au nom de CASH. le code est donné ci-dessous

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); 

ici le NO est fourmi incrémentation automatique est la clé primaire de toute façon, vous pouvez rechercher le contenu de la table en utilisant le code jsp que je donné ci-dessous

am recherche en utilisant ici à la fois NOM ADRESSE vous pouvez passer les paramètres à l'aide d'une page html et un servlet

La page html (show.html) que j'ai créé est donné ci-dessous

<!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> 

Le servlet est (g etshow.java) donné ci-dessous

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(); 

    } 

    } 


} 

Le fichier est jsp (show.jsp) ci-dessous

<%@ 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> 

vous pouvez maintenant rechercher soit le nom, ni l'adresse ou les deux.

+0

Pour que cela vous soit utile, vous devrez revenir en arrière et effectuer quelques reformatages majeurs ... en l'état, votre 'réponse' est illisible. –

Questions connexes