2012-08-05 80 views
6

我有一个servlet后续码 - 上运行SQL查询执行与PreparedStatement的

  String loginID = request.getParameter("loginId").toString(); 
      String loginPassword = request.getParameter("loginPassword").toString(); 
      String strSQLcount = "SELECT COUNT(*) as 'Number Of Match' " 
       + "FROM persons " + "WHERE (password =? AND id =?);"; 
      PreparedStatement prepareSQL = connection 
        .prepareStatement(strSQLcount); 
      prepareSQL.setString(1, loginPassword); 
      prepareSQL.setString(2, loginID); 
      ResultSet numOfMatchResult = prepareSQL.executeQuery(); 
      // now we know number of matchs ... 
      int numOfMatch = numOfMatchResult.getInt(1); 

何时到达行int numOfMatch = numOfMatchResult.getInt(1);它抛出异常 - java.sql.SQLException。我查了一下,发现它是因为executeQuery() 没有找到。尽管我在用MySQL创建的persons表中有两个字段 - id (text)的值为“300”,password (text)的值为“500”。当然我在loginIDloginPassword的两个值相同时检查它。我检查了与数据库连接的所有其他信息,因此我认为问题出在strSQLcount的SQL语法中。

+0

请显示异常消息/跟踪。请告诉您的代码是否曾经连接到特定的数据库。 – Javier 2012-08-05 08:39:02

回答

6

你忘了打电话给next()对结果集:

ResultSet numOfMatchResult = prepareSQL.executeQuery(); 
int numOfMatch = 0; 
if (rs.next() {  
    numOfMatch = numOfMatchResult.getInt(1); 
} 

如果这还不足以解决问题,粘贴异常的整个堆栈跟踪:它包含有意义的信息。

+0

感谢它足够:)所以直到我不做“rs.next()”的ResultSet我不能使用它? – URL87 2012-08-05 08:45:52

+0

每次要从结果集中检索信息时,都需要将光标指向给定的一行数据。 'rs.next()'把它放在下一行(第一次调用它时)。 – 2012-08-05 08:48:28