【问题标题】:Assigning SELECT COUNT(*) Query Result to a Java Variable将 SELECT COUNT(*) 查询结果分配给 Java 变量
【发布时间】:2011-04-26 17:33:25
【问题描述】:

我在将SELECT COUNT(*) 查询的结果分配给Java 变量时遇到问题。我将查询结果分配给 ResultSet。然后,我试图检索计数的值并将其分配给一个变量。尝试执行此操作时出现错误。

这是我的代码:

ResultSet rc1 = null;
int rowCount1;
Statement stat = conn.createStatement();

rc1 = stat.executeQuery("SELECT COUNT(*) AS rowcount1 
   FROM Signal WHERE SignalId = 1;");

if (rc1.next())
        rowCount1 = rc1.getInt("rowcount1");

然后我得到以下错误:

java.sql.SQLException:没有这样的列:'rowcount1'
在 org.sqlite.RS.findColumn(RS.java:116)
在 org.sqlite.RS.getInt(RS.java:219)

显然,问题在于尝试将 AS 之后的内容分配给变量时。我找不到很多关于包含 AS 的查询的信息。我在不计算的查询中遇到同样的错误。例如,如果我有以下代码:

ResultSet rp1 = null;
int rowCount1 = 0;
Statement stat = conn.createStatement();

rp1 = stat.executeQuery("SELECT Signal AS Sig1 
  FROM Observations WHERE SignalId = 1;");

if (rp1.next())
       rowCount1 = rp1.getInt("rowcount1");

我在前面的代码中遇到了同样的错误(没有这样的列:rowCount1)。我做错了什么?我确保我正在阅读的表包含正确的值,因此查询必须为真。

【问题讨论】:

  • 当您拉取COUNT(*) 值本身时,您确定从SELECT COUNT(*) FROM Signal WHERE SignalID = '12345' 等查询中得到正确的结果吗?
  • @kunal,感谢编辑,但下次请花时间清理代码,以免它跑出屏幕......
  • 您的问题被标记为mysql,但驱动程序看起来像sqlite org.sqlite.RS.findColumn。你能检查一下你的驱动程序吗?
  • 通过 JDBC 查询时,不要在查询中包含尾随 ;
  • getInt(0) 不起作用@Srinivas - 列编号从 1 开始。

标签: java mysql resultset


【解决方案1】:

只需使用rp1.getInt(1) -- 这会将结果集中的第一列作为 int 返回 -- 这正是您想要的。

如果您有更多值,请使用rp1.getInt(2) 获取第二个值等...

【讨论】:

  • 好的,我提供的第二个示例怎么样。假设查询返回多个值而不仅仅是一个。如何将这些值分配给变量?
  • 对不起,我发现我在第二个例子中输入了错误。
  • 您仍然可以使用列索引而不是列名,无论您的查询返回多少列,如果这就是您的意思。
  • 好的,让我试试这个建议。谢谢
  • 错误消失了。似乎最好坚持列 indeces。谢谢大家。
【解决方案2】:

第二个例子有错误:

rp1 = stat.executeQuery("SELECT Signal AS Sig1 
  FROM Observations WHERE SignalId = 1;");
...
   rowCount1 = rp1.getInt("rowcount1")

总是会失败,因为您的查询中没有 rowcount1 列。

【讨论】:

  • -1 select count(*) as rowcount1 在查询中创建一个名为“rowcount1”的列。 Java 似乎不允许从查询中获取命名列,但这是另一回事。
  • 我知道.. 我指的是第二个例子。查询:SELECT Signal AS Sig1 FROM Observations WHERE SignalId = 1; 然后他执行了:rp1.getInt("rowcount1"); 但原始查询中没有 rowcount1。
  • 我明白了,编辑了您的答案以解锁投票并修复了投票。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-09
  • 2022-01-06
  • 1970-01-01
  • 2018-11-21
  • 1970-01-01
相关资源
最近更新 更多