Как мне получить размер java.sql.ResultSet? - PullRequest
262 голосов
/ 10 октября 2008

Разве это не должно быть довольно простой операцией? Однако я вижу, что нет ни метода size(), ни length().

Ответы [ 14 ]

1 голос
/ 02 июня 2013

Я проверил значение времени выполнения интерфейса ResultSet и обнаружил, что он все время был ResultSetImpl . ResultSetImpl имеет метод с именем getUpdateCount(), который возвращает искомое значение.

Этого примера кода должно быть достаточно:
ResultSet resultSet = executeQuery(sqlQuery);
double rowCount = ((ResultSetImpl)resultSet).getUpdateCount()

Я понимаю, что уныние - это вообще небезопасная процедура, но этот метод меня еще не подвел.

0 голосов
/ 11 мая 2018

Дайте столбцу имя ..

String query = "SELECT COUNT(*) as count FROM

Ссылка на этот столбец из объекта ResultSet в int и выполнение вашей логики оттуда.

PreparedStatement statement = connection.prepareStatement(query);
statement.setString(1, item.getProductId());
ResultSet resultSet = statement.executeQuery();
while (resultSet.next()) {
    int count = resultSet.getInt("count");
    if (count >= 1) {
        System.out.println("Product ID already exists.");
    } else {
        System.out.println("New Product ID.");
    }
}
0 голосов
/ 06 ноября 2014

У меня была такая же проблема. Использование ResultSet.first() таким образом сразу после того, как выполнение решило это:

if(rs.first()){
    // Do your job
} else {
    // No rows take some actions
}

Документация ( ссылка ):

boolean first()
    throws SQLException

Перемещает курсор на первую строку в этом ResultSet объекте.

Возвращает:

true если курсор находится на действительном строка; false если в наборе результатов нет строк

Броски:

SQLException - если произошла ошибка доступа к базе данных; этот метод вызывается для закрытого набора результатов или тип набора результатов равен TYPE_FORWARD_ONLY

SQLFeatureNotSupportedException - если драйвер JDBC не поддерживает этот метод

С:

1,2

0 голосов
/ 13 марта 2013
theStatement=theConnection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);

ResultSet theResult=theStatement.executeQuery(query); 

//Get the size of the data returned
theResult.last();     
int size = theResult.getRow() * theResult.getMetaData().getColumnCount();       
theResult.beforeFirst();
...