我在 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
表中有 2 个字段,但它还是会发生 -
id (text)
值为“300”,password (text)
值为“500”。当然,当 loginID
和 loginPassword
具有相同的 2 个值时,我会检查它。我检查了与数据库连接的所有其他事情,一切正常。所以我认为问题出在 strSQLcount
中的 SQL 语法中。
最佳答案
您忘记在结果集上调用 next()
:
ResultSet numOfMatchResult = prepareSQL.executeQuery();
int numOfMatch = 0;
if (rs.next() {
numOfMatch = numOfMatchResult.getInt(1);
}
如果这还不足以解决问题,请粘贴异常的整个堆栈跟踪:它包含有意义的信息。
关于java - 使用 PreparedStatement 执行 sql 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11815012/