控制似乎永远不会进入if块

时间:2014-03-20 07:58:04

标签: java

我发现,如果(#sqlquery.equals(" 1"))"当它实际上恢复为真。可能是什么原因,应该怎么做!修改它?我的程序代码是:

//package searchbook;
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.sql.*;
    import java.util.*;

    public class SearchBook extends HttpServlet {
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException,IOException{
    response.setContentType("text/html"); 
    HttpSession session = request.getSession(true);
    List booklist=new ArrayList();
    Connection con = null;

    String url = "jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=" + "C:\\users\\ppreeti\\executive_db.accdb";

    String driver = "sun.jdbc.odbc.JdbcOdbcDriver";
    String user = "";
    String pass = "";
    String category="";
    category=request.getParameter("input");
    String sqlquery="select   Index1.link_id "    
            + "FROM Index1 "
            + " WHERE  Index1.index_name LIKE '%"+category+"%'  ";
    try
        {
            Class.forName(driver);
            con = DriverManager.getConnection(url, user, pass);
                try{
                    Statement st = con.createStatement();
                    System.out.println("Connection created 1");
                    ResultSet rs = st.executeQuery(sqlquery);
                    System.out.println("Result retreived  1");
                    //System.out.println('"sqlquery"');
                }
                catch (SQLException s)
                {
                    System.out.println("SQL statement is not executed! "+ s);
                }
            }
        catch (Exception e){
            e.printStackTrace();
        }
    System.out.println("************");
    //String sqlq="";

    if(sqlquery.equals("1"))
    {
    String sqlq="select Section.Section_Name , Report.Report_Name , Report.Link, Contact.Contact_Name, Metrics.Metric_Name "
            + "FROM Section , Report , Contact,Metrics "
            + "WHERE Report.Contact_ID=Contact.Contact_ID and Report.Section_ID=Section.Section_ID  "
            + "and Report.Report_ID IN (SELECT Metrics.Report_ID FROM Metrics  WHERE Metrics.Metric_Name = Report.Report_ID') and Metrics.Metric_Segment = 'M' ";

    System.out.println("2nd query executed too !");
    try
    {
        Class.forName(driver);
        con = DriverManager.getConnection(url, user, pass);
            try
                {
                Statement st = con.createStatement();
                System.out.println("Connection created");
                ResultSet rs = st.executeQuery(sqlq);
                System.out.println("Result retreived  ");
                while (rs.next())
                {
                List<String> book=new ArrayList<String>();

                String Name=rs.getString("Section_Name");
                String reportName=rs.getString("Report_Name");
                String link=rs.getString("Link");
                String contactName=rs.getString("Contact_Name");
                String metricName=rs.getString("Metric_Name");
                //String reportId=rs.getString("Report_ID");

                /*String ind_id=rs.getString("index_name");
                String ind_name=rs.getString("link_id");*/

                book.add(Name);
                book.add(reportName);
                book.add(link);
                book.add(contactName);
                book.add(metricName);
                //book.add(reportId);

                /*book.add(ind_id);
                book.add(ind_name);*/

                booklist.add(book);
                }
            }
            catch (SQLException s)
            {
                System.out.println("SQL statement is not executed! "+ s);
            }
        }
    catch (Exception e) {
    e.printStackTrace();
    }}
    System.out.println("And it came here lastly !");
    request.setAttribute("booklist",booklist); 
    RequestDispatcher dispatcher = getServletContext().getRequestDispatcher("/searchbook.jsp");
    dispatcher.forward(request, response); 
    }
    }

4 个答案:

答案 0 :(得分:0)

您的字符串sqlquery包含select语句,因此永远不会等于"1"

您需要检查查询结果,而不是查询字符串本身。

要做到这一点,您需要在<{em> rs之前定义Statement(以及try,我相信)阻止(因此它在该块之后保持在范围内),然后对其进行评估以查看它是否返回了您想要的数据。

如何执行此操作取决于"1"是否表示返回的行数或数据本身返回(来自Index1.link_id)。

答案 1 :(得分:0)

当然不会。 sqlquery是一个包含SQL代码("SELECT ...")的字符串。

答案 2 :(得分:0)

您正在设置变量

String sqlquery="select   Index1.link_id "
            + "FROM Index1 "
            + " WHERE  Index1.index_name LIKE '%"+category+"%'  ";

然后将其与1进行比较:

if(sqlquery.equals("1"))`

永远不会是真的

在sqlquery声明后立即添加String sqlResult = null; 并在

之后添加sqlResult = rs.getString(1)
rs = st.executeQuery(sqlquery);

然后与sqlResult而不是sqlQuery进行比较

答案 3 :(得分:0)

我怀疑你是在试图比较&#34; string&#34;用&#34; int&#34; :

if(sqlquery.equals("1"))

所以显然不会进入声明。

相反,你可以尝试这个

if(sqlquery != null)