繁体   English   中英

从Java中的ResultSet检索聚合的SQL值

[英]Retrieve an aggregated SQL value from a ResultSet in Java

我一直在这个问题上呆了几个小时:有3张桌子,其中一张通过地名和托盘ID连接其他桌子。 为了找出特定托盘上有多少样本,我通过托盘ID汇总了这些位置,这在纯SQL代码中非常有效。

我的Java代码:

 ps = connection.prepareStatement("SELECT TRAYID, COUNT(PlaceNo) AS OCCUPIED " +
                                                "FROM PLACE " +
                                                "GROUP BY TRAYID " +
                                                "HAVING TRAYID = ?");

        ps.setInt(1, trayId);

        rs = ps.executeQuery();

        if (!rs.isBeforeFirst()) { throw new CoolingSystemException(); }

        else {

            spaceOccupied = rs.getInt("OCCUPIED");

最后一行程序崩溃。 我也尝试过使用getInt(1)代替名称,但是没有任何效果。 如果结果集为空,则会在

if (!rs.isBeforeFirst()) { throw new CoolingSystemException(); }

我肯定知道的是,有一个价值

图片:使用相同TrayID的DBeaver

我肯定是这个地方,因为我在每行之前和之后的每个可以想象的点都记录了它。

有人知道如何解决吗? 我还尝试了get ...()函数中的每个数据类型:(

您的问题是,在检查结果集中是否有任何数据之后,您没有在调用rs.getInt()之前使用rs.next()向前移动光标。 现在看来,您似乎只希望结果集最多包含一行,您可以改为执行以下操作:

ps = connection.prepareStatement("SELECT TRAYID, COUNT(PlaceNo) AS OCCUPIED " +
                                            "FROM PLACE " +
                                            "GROUP BY TRAYID " +
                                            "HAVING TRAYID = ?");

ps.setInt(1, trayId);
rs = ps.executeQuery();

if (rs.next()) {
    spaceOccupied = rs.getInt("OCCUPIED");
} else {
    throw new CoolingSystemException();
}

如果查询未返回任何数据,则首次调用rs.next()将返回false。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM