From af38cb6f293932159692e5d2063f71f04a4ce171 Mon Sep 17 00:00:00 2001 From: himani-s993 Date: Thu, 2 Apr 2026 23:06:32 +0200 Subject: [PATCH 1/2] Fix NullPointerException in ContainerLessJdbcDelegate when using ScriptUtils --- .../jdbc/ContainerLessJdbcDelegate.java | 19 ++++++++++++ .../jdbc/JdbcDatabaseDelegate.java | 22 +++++++------- .../jdbc/ContainerLessJdbcDelegateTest.java | 29 +++++++++++++++++++ 3 files changed, 58 insertions(+), 12 deletions(-) create mode 100644 modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java diff --git a/modules/jdbc/src/main/java/org/testcontainers/jdbc/ContainerLessJdbcDelegate.java b/modules/jdbc/src/main/java/org/testcontainers/jdbc/ContainerLessJdbcDelegate.java index 0806ddd2c31..a6ee2babea9 100644 --- a/modules/jdbc/src/main/java/org/testcontainers/jdbc/ContainerLessJdbcDelegate.java +++ b/modules/jdbc/src/main/java/org/testcontainers/jdbc/ContainerLessJdbcDelegate.java @@ -33,4 +33,23 @@ protected Statement createNewConnection() { throw new ConnectionCreationException("Could create JDBC statement", e); } } + + @Override + protected void closeConnectionQuietly(Statement statement) { + if (statement != null) { + try { + statement.close(); + } catch (Exception e) { + log.error("Could not close JDBC connection", e); + } + } + + if (connection != null) { + try { + connection.close(); + } catch (Exception e) { + log.error("Could not close JDBC connection", e); + } + } + } } diff --git a/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java b/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java index 24c18944292..b733ab4aefe 100644 --- a/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java +++ b/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java @@ -40,12 +40,11 @@ protected Statement createNewConnection() { @Override public void execute( - String statement, - String scriptPath, - int lineNumber, - boolean continueOnError, - boolean ignoreFailedDrops - ) { + String statement, + String scriptPath, + int lineNumber, + boolean continueOnError, + boolean ignoreFailedDrops) { try { boolean rowsAffected = getConnection().execute(statement); log.debug("{} returned as updateCount for SQL: {}", rowsAffected, statement); @@ -53,12 +52,11 @@ public void execute( boolean dropStatement = statement.trim().toLowerCase().startsWith("drop"); if (continueOnError || (dropStatement && ignoreFailedDrops)) { log.debug( - "Failed to execute SQL script statement at line {} of resource {}: {}", - lineNumber, - scriptPath, - statement, - ex - ); + "Failed to execute SQL script statement at line {} of resource {}: {}", + lineNumber, + scriptPath, + statement, + ex); } else { throw new ScriptUtils.ScriptStatementFailedException(statement, lineNumber, scriptPath, ex); } diff --git a/modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java new file mode 100644 index 00000000000..e269e898925 --- /dev/null +++ b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java @@ -0,0 +1,29 @@ +package org.testcontainers.jdbc; + +import org.junit.jupiter.api.Test; + +import java.sql.Connection; +import java.sql.Statement; + +import static org.assertj.core.api.Assertions.assertThatCode; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +class ContainerLessJdbcDelegateTest { + + @Test + void closeClosesStatementAndConnectionQuietly() throws Exception { + Connection connection = mock(Connection.class); + Statement statement = mock(Statement.class); + when(connection.createStatement()).thenReturn(statement); + + ContainerLessJdbcDelegate delegate = new ContainerLessJdbcDelegate(connection); + delegate.execute("select 1", "test.sql", 1, false, false); + + assertThatCode(delegate::close).doesNotThrowAnyException(); + + verify(statement).close(); + verify(connection).close(); + } +} \ No newline at end of file From b96ee0740a3b4164bf0fd70dfc6bfddc59992f3d Mon Sep 17 00:00:00 2001 From: himani-s993 Date: Thu, 2 Apr 2026 23:39:38 +0200 Subject: [PATCH 2/2] Fix NullPointerException in ContainerLessJdbcDelegate when using ScriptUtils --- .../jdbc/JdbcDatabaseDelegate.java | 22 ++++++++++--------- .../jdbc/ContainerLessJdbcDelegateTest.java | 2 +- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java b/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java index b733ab4aefe..24c18944292 100644 --- a/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java +++ b/modules/jdbc/src/main/java/org/testcontainers/jdbc/JdbcDatabaseDelegate.java @@ -40,11 +40,12 @@ protected Statement createNewConnection() { @Override public void execute( - String statement, - String scriptPath, - int lineNumber, - boolean continueOnError, - boolean ignoreFailedDrops) { + String statement, + String scriptPath, + int lineNumber, + boolean continueOnError, + boolean ignoreFailedDrops + ) { try { boolean rowsAffected = getConnection().execute(statement); log.debug("{} returned as updateCount for SQL: {}", rowsAffected, statement); @@ -52,11 +53,12 @@ public void execute( boolean dropStatement = statement.trim().toLowerCase().startsWith("drop"); if (continueOnError || (dropStatement && ignoreFailedDrops)) { log.debug( - "Failed to execute SQL script statement at line {} of resource {}: {}", - lineNumber, - scriptPath, - statement, - ex); + "Failed to execute SQL script statement at line {} of resource {}: {}", + lineNumber, + scriptPath, + statement, + ex + ); } else { throw new ScriptUtils.ScriptStatementFailedException(statement, lineNumber, scriptPath, ex); } diff --git a/modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java index e269e898925..5eeae8cc8ba 100644 --- a/modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java +++ b/modules/jdbc/src/test/java/org/testcontainers/jdbc/ContainerLessJdbcDelegateTest.java @@ -26,4 +26,4 @@ void closeClosesStatementAndConnectionQuietly() throws Exception { verify(statement).close(); verify(connection).close(); } -} \ No newline at end of file +}