Как получить доступ к значению запроса SQL count() в программе на Java

Я хочу получить значение, которое я нахожу, используя команду COUNT SQL. Обычно я ввожу имя столбца, к которому хочу получить доступ, в метод getInt() getString(), что мне делать в этом случае, когда нет определенного имени столбца.

Я использовал «AS» так же, как используется для псевдонима таблицы, я не уверен, что это сработает, я бы так не думал.

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

person Ankur    schedule 04.05.2010    source источник


Ответы (7)


Используйте псевдонимы:

SELECT COUNT(*) AS total FROM ..

а потом

rs3.getInt("total")
person Bozho    schedule 04.05.2010
comment
по крайней мере, с моей стороны, сначала нужно вызвать rs3.next(), прежде чем вызывать rs3.getInt(total) - person user2805346; 10.02.2017
comment
Спасибо, у меня есть к вам просьба, мы можем поболтать? Пожалуйста - person Suraj Jain; 18.04.2017
comment
Определенно нужен вызов rs3.next() (до getInt()). В противном случае он выдаст SQLException java.sql.SQLException: ResultSet.next не был вызван - person Md.; 02.03.2021

Ответы предоставлены Bohzo и Brabster, очевидно, будет работать, но вы также можете просто использовать:

rs3.getInt(1);

чтобы получить значение в первом и, в вашем случае, единственном столбце.

person Eric Eijkelenboom    schedule 04.05.2010
comment
Из Javadoc: значения можно получить, используя либо номер индекса столбца, либо имя столбца. В общем, использование индекса столбца будет более эффективным. - person Andrea Polci; 04.05.2010
comment
Этот уровень настройки производительности действительно не важен для большинства приложений. Использование индексов столбцов подвергает вас ошибкам из-за перемещения столбцов в вашем SQL-запросе, которые может быть трудно отследить. В данном конкретном примере (просто получение количества записей) это не проблема, но об этом следует помнить для устойчивости приложения. - person Peder Rice; 27.09.2011
comment
@PederRicer не мог не согласиться. Слишком часто люди сосредотачиваются на микрооптимизации, когда ясность должна (почти всегда) быть главной целью кода. - person JonnyRaa; 09.05.2014

Я ожидаю, что этот запрос будет работать с вашей программой:

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

(Вам нужно использовать псевдоним столбца, а не таблицы)

person brabster    schedule 04.05.2010

Я сделал это так (пример):

String query="SELECT count(t1.id) from t1, t2 where t1.id=t2.id and t2.email='"[email protected]"'";
int count=0;
try {
    ResultSet rs = DatabaseService.statementDataBase().executeQuery(query);
    while(rs.next())
        count=rs.getInt(1);
} catch (SQLException e) {
    e.printStackTrace();
} finally {
    //...
}
person andrew    schedule 12.05.2013
comment
Я сделал то же самое, но я получаю NullPointerException(), вы можете помочь? - person Shubham Arya; 25.05.2018

Это похоже на выше, но вы можете попробовать, как

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);
        }
    }
}
person Dhruv Pal    schedule 25.07.2018

person    schedule
comment
вам нужно вызвать метод next(), чтобы начать набор результатов. например while(recSet.next()){ число = recSet.getInt(...); } - person Hatim; 12.03.2017

person    schedule
comment
Добро пожаловать в Stack Overflow! Пожалуйста, не отвечайте только исходным кодом. Постарайтесь дать хорошее описание того, как работает ваше решение. См.: Как написать хороший ответ?. Спасибо - person sɐunıɔןɐqɐp; 14.09.2018