【问题标题】:How do you access the value of an SQL count () query in a Java program如何在 Java 程序中访问 SQL count() 查询的值
【发布时间】: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");
    }

【问题讨论】:

    标签: java sql jdbc 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】:

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

      rs3.getInt(1);
      

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

      【讨论】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 2017-02-09
        • 2019-01-04
        • 2020-04-09
        • 2014-05-24
        • 2021-10-28
        • 1970-01-01
        • 2015-10-22
        • 1970-01-01
        • 2014-10-22
        相关资源
        最近更新 更多