如何为两个查询条件执行单个 Prepared Statement
Posted
技术标签:
【中文标题】如何为两个查询条件执行单个 Prepared Statement【英文标题】:How to execute single PreparedStatement for two querys conditions 【发布时间】:2015-02-01 20:21:04 【问题描述】:我希望查询根据用户编号检索结果。另一个查询按用户名检索。我做了一些工作,但在 NetBeans 中它没有显示任何错误,并且通过输出它只是停留在最初的 if() 条件
如果我在此过程中做错了什么,请帮助我解决...
<% String val_name = request.getParameter("name");
String val_number = request.getParameter("number");
String query;
if((val_name != null)&&(val_number != null)) %>
<h4> Use only one Column for Search </h3>
<%
else if((val_name == null)&&(val_number == null)) %>
<h4> Enter any Information on above field ... </h4>
<%
else
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","hari","root"); Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:XE","hari","root");
PreparedStatement stat;
ResultSet rs;
if(val_number != null)
query= val_number; // user Entered only Number Field ...
String sql="SELECT * FROM EMP WHERE EMPNO= ?";
stat=con.prepareStatement(sql);
stat.setString(1,val_number);
rs=stat.executeQuery();
else
query= val_name; // user Entered only Name Field ...
String sql="SELECT * FROM EMP WHERE ENAME = ?";
stat=con.prepareStatement(sql);
stat.setString(1,val_name);
rs=stat.executeQuery();
try
if(rs!=null)
%>
<br>
<table class="gridtable" border=1 cellspan=60 cellpadding=16>
<tr>
<th> Emp ID </th>
<th> Emp Name </th>
<th> Emp Dept </th>
<th> Emp D.o.B </th>
<th> Show Record </th>
<th> Record Update </th>
<th> Compassionate </th>
</tr>
<%
while(rs.next())
%>
<tr>
<td><%= rs.getInt("EMPNO")%> </td>
<td><%= rs.getString("ENAME") %> </td>
<td><%= rs.getString("JOB")%> </td>
<td><%= rs.getInt("DEPTNO")%> </td>
<td><button><a class="ui-button" type="button" href="/result.jsp?name="<%=name%> target="destination"> Show </a> </buton></td>
<td><button><a class="ui-button" type="button" href="/update.jsp?name="<%=name%> target="destination"> Update </a> </buton></td>
<td><button><a class="ui-button" type="button" href="/compassionate.jsp?name="<%=name%> target="destination"> Compassionate </a> </buton></td>
</tr>
<%
catch(SQLException e)
e.printStackTrace();
con.close();
%>
【问题讨论】:
请不要在 JSP 中嵌入 JDBC 代码。 Model 1 不可扩展,15 多年没有在工业中广泛使用。 但这只是用于测试小型应用程序... [最多 20 条记录] 好的,我会听从您的建议...但是您可以就问题提出任何建议... 在if-else
链之前定义ResultSet
。另外,请意识到这段代码非常脆弱。
是的,我做了那一步..并且还编辑了..我可以看到编辑后的代码,就像你说的那样,兄弟
【参考方案1】:
您的Connection
、PreparedStatement
和ResultSet
都在您的最后一个else
块中定义。将它们移到顶部。
else
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = DriverManager.getConnection(url,"hari","root");
PreparedStatement stat;
ResultSet rs;
定义变量如
String val_name = request.getParameter("name");
String val_number = request.getParameter("number");
String query;
String url = "jdbc:oracle:thin:@localhost:1521:XE";
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con = null;
PreparedStatement stat = null;
ResultSet rs = null;
然后设置if-else
链中的值。
【讨论】:
以上是关于如何为两个查询条件执行单个 Prepared Statement的主要内容,如果未能解决你的问题,请参考以下文章
如何为 Amazon redshift 数据库编写查询,使相关查询的 where 子句具有两个条件?
如何为 Firebase 实时数据库上的单个查询启用离线功能?