如何在 Java 程序中访问 SQL count() 查询的值

Posted

技术标签:

【中文标题】如何在 Java 程序中访问 SQL count() 查询的值【英文标题】:How do you access the value of an SQL count () query in a Java program 【发布时间】:2011-02-15 08:37:49 【问题描述】:

我想使用 SQL 的 COUNT 命令获得我找到的值。通常我在getInt() getString()方法中输入我要访问的列名,这种情况下没有具体的列名怎么办。

我使用 'AS' 的方式与给表起别名的方式相同,我不确定这是否可行,我认为不会。

Statement stmt3 = con.createStatement();
ResultSet rs3 = stmt3.executeQuery("SELECT COUNT(*) FROM "+lastTempTable+") AS count");
    while(rs3.next())
    count = rs3.getInt("count");
    

【问题讨论】:

【参考方案1】:
        <%
        try
            Class.forName("com.mysql.cj.jdbc.Driver").newInstance();
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/bala","bala","bala");
            if(con == null) System.out.print("not connected");
            Statement st = con.createStatement();
            String myStatement = "select count(*) as total from locations";
            ResultSet rs = st.executeQuery(myStatement);
            int num = 0;
            while(rs.next())
                num = (rs.getInt(1));
            

        
        catch(Exception e)
            System.out.println(e);  
        

        %>

【讨论】:

欢迎来到 Stack Overflow!请不要只用源代码回答。尝试对您的解决方案如何工作提供一个很好的描述。见:How do I write a good answer?。谢谢【参考方案2】:

和上面类似,但你可以试试

public Integer count(String tableName) throws CrateException 
        String query = String.format("Select count(*) as size from %s", tableName);
        try (Statement s = connection.createStatement()) 
            try (ResultSet resultSet = queryExecutor.executeQuery(s, query)) 
                Preconditions.checkArgument(resultSet.next(), "Result set is empty");
                return resultSet.getInt("size");
            
         catch (SQLException e) 
            throw new CrateException(e);
        
    

【讨论】:

【参考方案3】:
Statement stmt3 = con.createStatement();

ResultSet rs3 = stmt3.executeQuery("SELECT COUNT(*) AS count FROM "+lastTempTable+" ;");

count = rs3.getInt("count");

【讨论】:

你需要调用 next() 方法来启动结果集。例如while(recSet.next()) num = recSet.getInt("..."); 【参考方案4】:

我是这样做的(例子):

String query="SELECT count(t1.id) from t1, t2 where t1.id=t2.id and t2.email='"r@r.com"'";
int count=0;
try 
    ResultSet rs = DatabaseService.statementDataBase().executeQuery(query);
    while(rs.next())
        count=rs.getInt(1);
 catch (SQLException e) 
    e.printStackTrace();
 finally 
    //...

【讨论】:

我做了同样的事情,但我得到 NullPointerException(),你能帮忙吗?【参考方案5】:

使用别名:

SELECT COUNT(*) AS total FROM ..

然后

rs3.getInt("total")

【讨论】:

至少在我这边,它需要在调用 rs3.getInt("total") 之前先调用 rs3.next() 谢谢,我有事要问你,我们可以聊聊吗?请 它肯定需要调用 rs3.next()(在 getInt() 之前)。否则会抛出 SQLException java.sql.SQLException: ResultSet.next was not called【参考方案6】:

Bohzo 和 Brabster 提供的答案显然可以,但您也可以使用:

rs3.getInt(1);

获取第一列的值,在你的情况下,只有列。

【讨论】:

来自 Javadoc:“可以使用列的索引号或列的名称来检索值。通常,使用列索引会更有效。” 这种级别的性能调整对于大多数应用程序来说确实并不重要。使用列索引会使您暴露于 SQL 查询中移动的列的错误,这可能难以追踪。在这个特定的示例中(仅获取记录数),这不是问题,但为了应用程序的可持续性,需要牢记这一点。 @PederRicer 完全同意。当清晰应该(几乎总是)成为代码的主要目标时,人们往往会关注微优化【参考方案7】:

我希望此查询可以与您的程序一起使用:

"SELECT COUNT(*) AS count FROM "+lastTempTable+")"

(你需要给列起别名,而不是表)

【讨论】:

以上是关于如何在 Java 程序中访问 SQL count() 查询的值的主要内容,如果未能解决你的问题,请参考以下文章

如何在 NodeJS 中访问 SQL 请求的结果?

如何从 PL/SQL 过程中访问 http URL?

为啥 SQL SELECT 语句在 Java Spring boot 项目中不返回 COUNT() 结果?

java中如何实现mysql中的group by order by count()功能

如何在 SQL 中使用 count(*) [重复]

sql语句分页查询,如何同时返回记录总条数