JDBC preparedStatement 在 JSP 中不起作用

JDBC preparedStatement not working in JSP

  1. 如果查询是静态的(无参数),PreparedStatement 工作正常,例如:

    select * from RWEMP; 
    
  2. 但是如果我将下面的代码与搜索条件一起使用:

    SELECT * FROM RWEMP WHERE ENAME= ?
    

    它没有显示任何内容,它只是显示 table headers。

    <FORM METHOD="get"> 
            <INPUT TYPE="text" NAME="cond" SIZE=50>
    </FORM> <br> <br>
    
        <% String value = request.getParameter("cond"); 
            if (value != null) { %>
        <H3> Search results for  <I> <%= value %> </I> </H3>
            <% }  %>
    
        <%@page import="java.sql.*" %>  
             <%Class.forName("oracle.jdbc.driver.OracleDriver");
    
              String sql="SELECT * FROM RWEMP WHERE ENAME= ?";
    
             Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","hari","root"); 
             PreparedStatement stat=con.prepareStatement(sql);
             stat.setString(1,"value");
             ResultSet rs=stat.executeQuery();
             try {
                 if(rs!=null) {
             %>     
            <table border=1 cellspan=60 cellpadding=16> 
                 <tr>
                    <th> Emp ID </th>
                    <th> Emp Name </th>
                    <th> Emp Dept </th>
                    <th> Emp Area </th>
                    <th> Emp D.O.B  </th>
                    <th> EMP Mobile </th>
                    <th> Emp Salary </th>
                    <th> EMP Wife </th>
                </tr> 
            <%
              while(rs.next()) {
            %>
            <tr> 
                <td><%= rs.getString("EID")%> </td>
                <td><%= rs.getString("ENAME") %> </td>
                <td><%= rs.getString("EDEPT")%> </td>
                <td><%= rs.getString("EAREA")%> </td>
                <td><%= rs.getString("EDOB")%> </td>
                <td><%= rs.getString("EMOBILE")%> </td>
                <td><%= rs.getString("ESAL")%> </td>
                <td><%= rs.getString("ESPOUSE")%> </td>
             </tr>
             <%
              } 
               }
         }                        
              catch(SQLException e) { 
                e.printStackTrace();
                 } 
    con.close();
    

    %>

将您的PreparedStatement的查询参数绑定代码更改为

stat.setString(1, value); // no quotes

您需要搜索 value 变量包含的内容,而不是搜索其名称 "value" 本身。