diff --git a/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/AbstractJDBCTestElement.java b/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/AbstractJDBCTestElement.java
index c69b9f0..0680cf5 100644
--- a/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/AbstractJDBCTestElement.java
+++ b/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/AbstractJDBCTestElement.java
@@ -167,6 +167,7 @@
         if (SELECT.equals(currentQueryType)) {
             try (Statement stmt = conn.createStatement()) {
                 setQueryTimeout(stmt, getIntegerQueryTimeout());
+                configureMaxRows(stmt);
                 ResultSet rs = null;
                 try {
                     rs = stmt.executeQuery(getQuery());
@@ -198,6 +199,7 @@
         } else if (PREPARED_SELECT.equals(currentQueryType)) {
             try (PreparedStatement pstmt = getPreparedStatement(conn)) {
                 setArguments(pstmt);
+                configureMaxRows(pstmt);
                 ResultSet rs = null;
                 try {
                     rs = pstmt.executeQuery();
@@ -236,7 +238,15 @@
         }
     }
 
+    private void configureMaxRows(Statement stmt) throws SQLException {
+        int maxRows = getIntegerResultSetMaxRows();
+        if (maxRows >= 0) {
+           stmt.setMaxRows(maxRows);
+        }
+    }
+
     private String resultSetsToString(PreparedStatement pstmt, boolean result, int[] out) throws SQLException, UnsupportedEncodingException {
+        configureMaxRows(pstmt);
         StringBuilder sb = new StringBuilder();
         int updateCount = 0;
         boolean currentResult = result;
diff --git a/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java b/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
index db95cd7..7c23db0 100644
--- a/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
+++ b/src/protocol/jdbc/src/main/java/org/apache/jmeter/protocol/jdbc/sampler/JDBCSampler.java
@@ -72,16 +72,17 @@
         Connection conn = null;
 
         try {
-            if (JOrphanUtils.isBlank(getDataSource())) {
+            String dataSource = getDataSource();
+            if (JOrphanUtils.isBlank(dataSource)) {
                 throw new IllegalArgumentException("Name for DataSoure must not be empty in " + getName());
             }
 
             try {
-                conn = DataSourceElement.getConnection(getDataSource());
+                conn = DataSourceElement.getConnection(dataSource);
             } finally {
                 res.connectEnd();
             }
-            res.setResponseHeaders(DataSourceElement.getConnectionInfo(getDataSource()));
+            res.setResponseHeaders(DataSourceElement.getConnectionInfo(dataSource));
             res.setResponseData(execute(conn, res));
         } catch (SQLException ex) {
             final String errCode = Integer.toString(ex.getErrorCode());
diff --git a/src/protocol/jdbc/src/test/kotlin/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerTest.kt b/src/protocol/jdbc/src/test/kotlin/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerTest.kt
index 1ab034d..7777d2a 100644
--- a/src/protocol/jdbc/src/test/kotlin/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerTest.kt
+++ b/src/protocol/jdbc/src/test/kotlin/org/apache/jmeter/protocol/jdbc/sampler/JDBCSamplerTest.kt
@@ -80,6 +80,7 @@
         val stmt = mockk<Statement> {
             every { executeQuery(any()) } returns rs
             justRun { queryTimeout = any() }
+            justRun { maxRows = any() }
             justRun { close() }
         }
         val conn = mockk<Connection> {
@@ -90,11 +91,13 @@
         }
 
         sut.query = "SELECT"
+        sut.resultSetMaxRows = "10"
         val response = sut.executeForTest(conn, sample)
 
         verifyOrder {
             conn.createStatement()
             stmt.queryTimeout = 0
+            stmt.maxRows = 10
             stmt.executeQuery(any())
             sample.latencyEnd()
             // getStringFromResultSet
diff --git a/xdocs/changes.xml b/xdocs/changes.xml
index ef7546a..d07120f 100644
--- a/xdocs/changes.xml
+++ b/xdocs/changes.xml
@@ -83,6 +83,7 @@
   <li><issue>6165</issue><pr>6192</pr>The Constant Throughput Timer is throwing a NullPointerException when using variables (vars.get) in "Target Throughput"-field</li>
   <li><issue>6162</issue>The Constant Timer is throwing a NullPointerException when using variables (vars.get) in "delay"-field</li>
   <li><pr>6193</pr>Log errors happening while JMeter starts the test (previously, errors from TestStateListener.testStarted were not logged)</li>
+  <li><pr>6216</pr>Pass JDBCSampler.maxRows to Statement.setMaxRows so the driver does not fetch extra rows from the database</li>
 </ul>
 
 <ch_section>Non-functional changes</ch_section>
