JDBC:如何从结果集中检索 SQL COUNT 函数的结果?

Posted

技术标签:

【中文标题】JDBC:如何从结果集中检索 SQL COUNT 函数的结果?【英文标题】:JDBC: How to retrieve the result of SQL COUNT function from the result set? 【发布时间】:2014-06-15 17:17:27 【问题描述】:

通常,当我们想要从数据库中检索表中存在的值时,我们会调用 ResultSet 的适当方法并将我们想要检索的列名传递给它。

   ResultSet rs= stmt.executeQuery("select name from db.persons where school ='"+sch+"'");
    int count= rs.getString("person_name");

但是当我们想要获取特定列中的行数(或字段)时(我们使用 SQL COUNT 函数)但是我们如何检索结果。 我应该在以下代码中的 rs.getInt() 方法中传递什么参数?

ResultSet rs= stmt.executeQuery("select count(name) from db.persons where school ='"+sch+"'");
int count= rs.getInt( ????? );

【问题讨论】:

查看这个答案***.com/questions/192078/… @gubble 在这种情况下,在该答案中应用结果将给出 1,而 OP 需要在数据库上执行 COUNT 函数。 我的问题与那个问题不同。他们想要获得结果集的大小。我直接想执行查询来获取行数! @gubble @a_horse_with_no_name 对!匆忙输入的示例,我将更正它。 【参考方案1】:

给列命名:

ResultSet rs= stmt.executeQuery("select count(name) AS count_name from db.persons where school ='"+sch+"'");
if (rs.next()) 
    int count= rs.getInt("count_name");

您还可以传递基于 1 的列索引编号(以防您不想修改查询)。检查ResultSet#getInt(int columnIndex)

ResultSet rs= stmt.executeQuery("select count(name) from db.persons where school ='"+sch+"'");
if (rs.next()) 
    int count= rs.getInt(1);


除此之外,最好使用PreparedStatement 来执行查询,它比普通的Statement 有很多优势,如下所述:Difference between Statement and PreparedStatement。您的代码如下所示:

String sql = "select count(name) AS count_name from db.persons where school = ?";
PreparedStatement pstmt = con.prepareStatement(sql);
pstmt.setString(1, sch);
ResultSet rs = pstmt.executeQuery();
if (rs.next()) 
    int count = rs.getInt("count_name");

【讨论】:

非常感谢您的详尽回答。我很快就会了解准备好的语句。 @Zarah 不客气。我强烈建议您在使用普通 JDBC 时使用 PreparedStatements 而不是使用 Statement 接口。 显示的代码不正确,它缺少对rs.next()的调用。

以上是关于JDBC:如何从结果集中检索 SQL COUNT 函数的结果?的主要内容,如果未能解决你的问题,请参考以下文章

使用 sql server 从 jdbc 中的结果集中转到最后一行

如何获取 JDBC SQL Count 结果为 int?

JDBC结果集

如何使用 jdbc 从 Oracle 中的结果集中获取模式名称?

JDBC的结果集

JDBC 从选择结果集中选择