java - 使用 PreparedStatement 执行 sql 查询

标签 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() 没有人找回。尽管我在用 MySQL 创建的 persons 表中有 2 个字段,但它还是会发生 - id (text) 值为“300”,password (text) 值为“500”。当然,当 loginIDloginPassword 具有相同的 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/

相关文章:

Java Swing - 最佳实践 - 频繁添加/删除面板

Sql Server 创建表查询

java - Servlet 混合 header 和内容并在输出中写入相同的两次?

google-app-engine - 在 Java GAE 后端 Servlet 中使用 Guice 注入(inject)

Java:数组在类之间传输,但值却不能?

java - 如何在 selenium webdriver 中使用 Ctrl+Shift+R

java - 需要 JPA/Hibernate 实体上的 setter 来获取 ID 和外部实体

sql - CASE THEN 子句始终求值

c# - 将桌面应用程序转换为 Web 应用程序

java - jQuery 将 servlet 名称添加到 URL 中两次