sql查询使用PreparedStatement执行

时间:2012-08-05 08:33:15

标签: java sql servlets prepared-statement executequery

我在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() 找不到任何人。虽然我在persons表中,使用MySQL创建了2个字段,但它仍然存在 - id (text)的值为“300”,password (text)的值为“500”。当然,我在loginIDloginPassword时使用相同的2值进行检查。我检查了与DB的连接的所有其他事情,它没关系..所以我认为问题出在strSQLcount的SQL语法中。

1 个答案:

答案 0 :(得分:6)

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

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

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