JDBC preparedStatement在JSP中不工作
如果查询为静态且无参数,则PreparedStatement工作正常,例如:JDBC preparedStatement在JSP中不工作,jsp,jdbc,oracle11g,prepared-statement,Jsp,Jdbc,Oracle11g,Prepared Statement,如果查询为静态且无参数,则PreparedStatement工作正常,例如: select * from RWEMP; 但如果我在搜索条件下使用以下代码: SELECT * FROM RWEMP WHERE ENAME= ? 它没有显示任何内容,只是显示表标题 <FORM METHOD="get"> <INPUT TYPE="text" NAME="cond" SIZE=50> </FORM> <br> <br>
select * from RWEMP;
但如果我在搜索条件下使用以下代码:
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();
%>
将PreparedStatement的查询参数绑定代码更改为
stat.setString(1, value); // no quotes
您需要搜索value变量包含的内容,而不是它的名称值本身。将PreparedStatement的查询参数绑定代码更改为
stat.setString(1, value); // no quotes
您需要搜索value变量包含的内容,而不是它的名称和值本身。不相关,但是:不要将类似的SQL代码放在JSP中,尤其是不要获取连接。为此使用连接池。JSP应该只包含表示代码,从不包含Java代码,绝对不包含SQL代码。不相关,但是:不要将SQL代码像那样放在JSP中,尤其是不要获取连接。为此使用连接池。JSP应该只包含表示代码,决不包含Java代码,决不包含SQL代码。