【问题标题】:JDBC preparedStatement not working in JSPJDBCpreparedStatement 在 JSP 中不起作用
【发布时间】:2015-03-30 19:54:43
【问题描述】:
  1. 如果查询是静态的(无参数),PreparedStatement 工作正常,例如:

    select * from RWEMP; 
    
  2. 但如果我使用下面的代码和搜索条件:

    SELECT * FROM RWEMP WHERE ENAME= ?
    

    它不显示任何东西,它只是显示表格标题。

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

    %>

【问题讨论】:

  • 不相关,但是:不要将这样的 SQL 代码放在 JSP 中——尤其是不获取连接。为此使用连接池。 JSP 应该包含演示代码,绝不包含 Java 代码,绝对绝不包含 SQL 代码。

标签: jsp jdbc oracle11g prepared-statement


【解决方案1】:

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

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

您需要搜索 value 变量包含的内容,而不是通过其名称“值”本身来搜索。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-06
    • 2020-12-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多