JDBC preparedStatement 在 JSP 中不起作用
JDBC preparedStatement not working in JSP
如果查询是静态的(无参数),PreparedStatement 工作正常,例如:
select * from RWEMP;
但是如果我将下面的代码与搜索条件一起使用:
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" 本身。
如果查询是静态的(无参数),PreparedStatement 工作正常,例如:
select * from RWEMP;
但是如果我将下面的代码与搜索条件一起使用:
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" 本身。