2012-08-05 71 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