使用PreparedStatement执行SQL查询

6

我有一个servlet中的代码:

            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(文本)的值为“300”,以及password(文本)的值为“500”,并且当loginIDloginPassword具有相同的这两个值时进行了检查。我检查了与数据库连接相关的所有其他事项,都正常。因此,我认为问题出在strSQLcount的SQL语法上。

请显示异常消息/跟踪。请告诉我您的代码是否曾连接到该特定数据库。 - Javier
1个回答

6

你忘记在结果集上调用next()

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

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

谢谢,那么在我没有对ResultSet执行"rs.next()"之前,我不能使用它吗? - URL87
每次您想从结果集检索信息时,都需要将光标指向给定的数据行。rs.next()会将其放置在下一行(第一次调用时是第一行)。 - JB Nizet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接