Java 控制似乎永远不会进入if块
我发现当控件实际返回为true时,它似乎从未进入从ifsqlquery.equals1开始的if块。这可能是什么原因,应该怎么做!修改它?我的程序代码是:Java 控制似乎永远不会进入if块,java,Java,我发现当控件实际返回为true时,它似乎从未进入从ifsqlquery.equals1开始的if块。这可能是什么原因,应该怎么做!修改它?我的程序代码是: //package searchbook; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; import java.sql.*; import java.util.*; public class Se
//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);
}
}
字符串sqlquery包含select语句,因此永远不会等于1
您需要检查查询的结果,而不是查询字符串本身
要做到这一点,您还需要定义rs和语句,我相信在try块之前,它会在该块之后保持在作用域中,然后对其进行求值,以查看它是否返回了所需的数据
如何做到这一点取决于1是表示返回的行数还是从Index1.link\u id返回的数据本身。当然不会。sqlquery是一个字符串,包含SQL代码SELECT….您正在设置变量
String sqlquery="select Index1.link_id "
+ "FROM Index1 "
+ " WHERE Index1.index_name LIKE '%"+category+"%' ";
然后将其与1进行比较:
if(sqlquery.equals("1"))`
这永远不会是真的
添加一个字符串sqlResult=null;就在sqlquery声明之后
并将sqlResult=rs.getString1添加到
rs = st.executeQuery(sqlquery);
然后与sqlResult而不是sqlQuery进行比较我怀疑您试图将字符串与int进行比较:
if(sqlquery.equals("1"))
因此,它显然不会进入声明中
你可以试试这个
if(sqlquery != null)
您正在查询。。不是结果:你用哪个IDE?开始调试,您很快就会知道问题出在哪里,但是sqlqueary是一个字符串变量ryt?所以它应该是真的,可以与1相比。是吗?是的。香蕉也可以和1相比。但是,这个比较的结果将是一个巨大的不平等,即使1是我厨房里现在有多少香蕉的正确答案。我遵从@David there,他的答案比我想象的更有趣。是的,您可以比较字符串,但是,如果您的目的是将查询结果与其他内容进行比较,那么您应该这样做。不比较实际的查询字符串本身。因此,请告诉我应该如何操作来启发我!:@用户3436273,答案是这样的。你需要使用rs来获取你想要的信息。谢谢你让我理解我的错误!所以我这么做了,但现在我又犯了一个错误!java.lang.NullPointerException SearchBook.doPostSearchBook.java:52 javax.servlet.http.HttpServlet.serviceHttpServlet.java:643 javax.servlet.http.HttpServlet.serviceHttpServlet.java:723请帮助我!错误出现在以下行中:字符串sqlq=选择Section.Section\u名称、Report.Report\u名称、Report.Link、Contact.Contact\u名称、Metrics.Metric\u名称+来自Section、Report、Contact、,Metrics+其中Report.Contact\u ID=Contact.Contact\u ID和Report.Section\u ID=Section.Section\u ID+和Report.Report\u ID,从Metrics中选择Metrics.Report\u ID,其中Metrics.Metric\u Name=Report.Report\u ID'和Metrics.Metric\u段='M';它还生成消息SQL语句未执行!java.sql.SQLException:[Microsoft][ODBC驱动程序管理器]控制台中的游标状态无效!:这是另一个问题,但至少我可以在您的sql中发现一个“WHERE Metrics.Metric_Name=Report.Report_ID”在Report.Report_ID之后删除该引号