我可以在具有不同查询的if-else梯形图中使用相同的ResultSet语句对象吗?

时间:2014-12-03 02:41:24

标签: java oracle jsp

<%
String s1=request.getParameter("cmpname");

String s2=request.getParameter("bname");

String s3=request.getParameter("oname");

Class.forName("oracle.jdbc.driver.OracleDriver");
Connection con=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","system","manager");

Statement stmt=con.createStatement();

ResultSet rs=null;
**if( !(   s1.equals("") && s2.equals("") && s3.equals("")   ))**//only this is executing
{

  rs=stmt.executeQuery("select * from comp where operating='"+s3+"' and name='"+s1+"' and prolong='"+s2+"'");

}
*else if( (s1.equals("") && s2.equals("")) || (s1.equals("") && s3.equals("")) || (s2.equals("") && s3.equals("")) )* 
{
if( (s1.equals("") && s2.equals("")) )
      rs=stmt.executeQuery("select * from comp where operating='"+s3+"'");
else if( (s1.equals("") && s3.equals("")) )
      rs=stmt.executeQuery("select * from comp where prolong='"+s2+"'");
else if( (s2.equals("") && s3.equals("")) )
      rs=stmt.executeQuery("select * from comp where name='"+s1+"'");
 }
 *else
 {* 
    if( s1.equals(""))
          rs=stmt.executeQuery("select * from comp where operating='"+s3+"' and      prolong='"+s2+"'");
    else if( s2.equals(""))
          rs=stmt.executeQuery("select * from comp where operating='"+s3+"' and name='"+s1+"'");
    else if( s3.equals(""))
          rs=stmt.executeQuery("select * from comp where name='"+s1+"' and prolong='"+s2+"'");
  }
 while(rs.next())
 {

  String componentName=rs.getString("name");
  String author=rs.getString("author");
  String domain=rs.getString("domain");
  String programmingL=rs.getString("prolong");
  String opersys=rs.getString("operating");
  String fun=rs.getString("functionality");

    test=false;
 }
%>

仅执行第一个结果集语句。 当第二个和第三个条件成立时,我得到空白页面。 请告诉我正确执行的正确代码。 提前谢谢。

1 个答案:

答案 0 :(得分:0)

在上面的代码中,您实际上并未尝试重复使用相同的ResultSet对象,这就是您所询问的内容。您所要做的就是使用相同的ResultSet变量。这不是一回事。

无论如何,你的问题实际上与ResultSet无关。我不认为每个if中的条件都符合您的意图。特别是

if( !(   s1.equals("") && s2.equals("") && s3.equals("")   ))

将为true,除非所有三个变量都是空字符串。在这种情况下,您将进入第一个else if,但您永远不会进入最后的else。我怀疑你甚至没有测试所有三个变量都是空字符串的情况。

我强烈怀疑在第一个if,你打算写

if( !(   s1.equals("") || s2.equals("") || s3.equals("")   ))

与所有三个变量都具有非空值相同。