Ensure ResultSet is closed on table operation

This commit is contained in:
Martyn Taylor 2016-06-03 16:30:14 +01:00 committed by Clebert Suconic
parent 4d51f4d0b8
commit 2932a2a711
2 changed files with 24 additions and 8 deletions

View File

@ -65,12 +65,21 @@ public class JDBCUtils {
public static void createTableIfNotExists(Connection connection, String tableName, String sql) throws SQLException {
logger.tracef("Validating if table %s didn't exist before creating", tableName);
ResultSet rs = connection.getMetaData().getTables(null, null, tableName, null);
if (!rs.next()) {
logger.tracef("Table %s did not exist, creating it with SQL=%s", tableName, sql);
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
try {
connection.setAutoCommit(false);
try (ResultSet rs = connection.getMetaData().getTables(null, null, tableName, null)) {
if (rs != null && !rs.next()) {
logger.tracef("Table %s did not exist, creating it with SQL=%s", tableName, sql);
Statement statement = connection.createStatement();
statement.executeUpdate(sql);
}
}
connection.commit();
}
catch (SQLException e) {
connection.rollback();
}
}
public static SQLProvider getSQLProvider(String driverClass, String tableName) {

View File

@ -43,6 +43,7 @@ import java.net.ServerSocket;
import java.sql.Connection;
import java.sql.Driver;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
@ -467,10 +468,16 @@ public abstract class ActiveMQTestBase extends Assert {
Statement statement = connection.createStatement();
try {
for (String tableName : tableNames) {
connection.setAutoCommit(false);
SQLProvider sqlProvider = JDBCUtils.getSQLProvider(getJDBCClassName(), tableName);
ResultSet rs = connection.getMetaData().getTables(null, null, sqlProvider.getTableName(), null);
if (rs.next()) {
statement.execute("DROP TABLE " + sqlProvider.getTableName());
try (ResultSet rs = connection.getMetaData().getTables(null, null, sqlProvider.getTableName(), null)) {
if (rs.next()) {
statement.execute("DROP TABLE " + sqlProvider.getTableName());
}
connection.commit();
}
catch (SQLException e) {
connection.rollback();
}
}
}