如何在 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() 查询的值的主要内容,如果未能解决你的问题,请参考以下文章
为啥 SQL SELECT 语句在 Java Spring boot 项目中不返回 COUNT() 结果?