This is an automated email from the ASF dual-hosted git repository.

ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-dbutils.git


The following commit(s) were added to refs/heads/master by this push:
     new 27ca6db  org.apache.commons.dbutils.ResultSetIterator.next() now 
throws NoSuchElementException as defined in java.util.Iterator.next()
27ca6db is described below

commit 27ca6db9458c8548e08790b557c47878c5e2d76f
Author: Gary Gregory <[email protected]>
AuthorDate: Mon Jan 5 07:58:52 2026 -0500

    org.apache.commons.dbutils.ResultSetIterator.next() now throws
    NoSuchElementException as defined in java.util.Iterator.next()
    
    See also PR #283
---
 src/changes/changes.xml                                |  1 +
 .../org/apache/commons/dbutils/ResultSetIterator.java  | 18 ++++++++++++------
 .../apache/commons/dbutils/ResultSetIteratorTest.java  |  4 +++-
 3 files changed, 16 insertions(+), 7 deletions(-)

diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 7dc472f..3f8cbd7 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -57,6 +57,7 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" dev="ggregory" due-to="Gary 
Gregory">ResultSetIterator.hasNext() now throws IllegalStateException instead 
of RuntimeException to wrap cases of SQLException.</action>
       <action type="fix" dev="ggregory" due-to="Gary 
Gregory">ResultSetIterator.next() now throws IllegalStateException instead of 
RuntimeException to wrap cases of SQLException.</action>
       <action type="fix" dev="ggregory" due-to="Gary 
Gregory">ResultSetIterator.remove() now throws IllegalStateException instead of 
RuntimeException to wrap cases of SQLException.</action>
+      <action type="fix" dev="ggregory" due-to="Gary Gregory, 
Matheus_Maas">org.apache.commons.dbutils.ResultSetIterator.next() now throws 
NoSuchElementException as defined in java.util.Iterator.next() #283.</action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="strangelookingnerd, Gary 
Gregory">BaseResultSetHandler implements ResultSet.</action>
       <!-- UPDATE -->
diff --git a/src/main/java/org/apache/commons/dbutils/ResultSetIterator.java 
b/src/main/java/org/apache/commons/dbutils/ResultSetIterator.java
index 4127fa7..35c6d1f 100644
--- a/src/main/java/org/apache/commons/dbutils/ResultSetIterator.java
+++ b/src/main/java/org/apache/commons/dbutils/ResultSetIterator.java
@@ -19,6 +19,7 @@ package org.apache.commons.dbutils;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Iterator;
+import java.util.NoSuchElementException;
 
 /**
  * <p>
@@ -97,17 +98,22 @@ public class ResultSetIterator implements 
Iterator<Object[]> {
      *
      * @return An {@code Object[]} with the same number of elements as
      * columns in the {@code ResultSet}.
-     * @see java.util.Iterator#next()
      * @throws RuntimeException if an SQLException occurs.
+     * @throws NoSuchElementException if the iteration has no more elements.
+     * @see java.util.Iterator#next()
      */
     @Override
     public Object[] next() {
-        try {
-            return resultSet.next() ? this.convert.toArray(resultSet) : new 
Object[0];
-        } catch (final SQLException e) {
-            rethrow(e);
-            return null;
+        if (hasNext()) {
+            try {
+                resultSet.next();
+                return this.convert.toArray(resultSet);
+            } catch (final SQLException e) {
+                rethrow(e);
+                return null;
+            }
         }
+        throw new NoSuchElementException("No more rows in the ResultSet");
     }
 
     /**
diff --git 
a/src/test/java/org/apache/commons/dbutils/ResultSetIteratorTest.java 
b/src/test/java/org/apache/commons/dbutils/ResultSetIteratorTest.java
index 61128f3..8dc3619 100644
--- a/src/test/java/org/apache/commons/dbutils/ResultSetIteratorTest.java
+++ b/src/test/java/org/apache/commons/dbutils/ResultSetIteratorTest.java
@@ -18,6 +18,7 @@ package org.apache.commons.dbutils;
 
 import static org.junit.jupiter.api.Assertions.assertEquals;
 import static org.junit.jupiter.api.Assertions.assertFalse;
+import static org.junit.jupiter.api.Assertions.assertThrows;
 import static org.junit.jupiter.api.Assertions.assertTrue;
 import static org.junit.jupiter.api.Assertions.fail;
 import static org.mockito.Mockito.mock;
@@ -25,6 +26,7 @@ import static org.mockito.Mockito.mock;
 import java.sql.ResultSet;
 import java.sql.SQLException;
 import java.util.Iterator;
+import java.util.NoSuchElementException;
 
 import org.junit.jupiter.api.Test;
 
@@ -63,7 +65,7 @@ class ResultSetIteratorTest extends BaseTestCase {
         assertEquals("SIX", row[2]);
 
         assertFalse(iter.hasNext());
-        assertEquals(0, iter.next().length);
+        assertThrows(NoSuchElementException.class, iter::next);
     }
 
     @Test

Reply via email to