From 4c93bf7cf06a3c5a142f6df69323d53f73249e30 Mon Sep 17 00:00:00 2001 From: bakatrouble Date: Sun, 25 Dec 2016 20:07:02 +0300 Subject: [PATCH] Fix connection leaking on batch inserts; fix IDEA analyser warning --- .../common/storage/backing/SQLBacking.java | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/common/src/main/java/me/lucko/luckperms/common/storage/backing/SQLBacking.java b/common/src/main/java/me/lucko/luckperms/common/storage/backing/SQLBacking.java index 066caa3ab..3cf991267 100644 --- a/common/src/main/java/me/lucko/luckperms/common/storage/backing/SQLBacking.java +++ b/common/src/main/java/me/lucko/luckperms/common/storage/backing/SQLBacking.java @@ -43,6 +43,7 @@ import java.io.InputStream; import java.io.InputStreamReader; import java.lang.reflect.Type; import java.nio.charset.StandardCharsets; +import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.SQLException; import java.sql.Statement; @@ -103,7 +104,7 @@ public class SQLBacking extends AbstractBacking { return provider.runQuery(query, queryRS); } - public boolean tableExists(String table) throws SQLException { + private boolean tableExists(String table) throws SQLException { return provider.getConnection().getMetaData().getTables(null, null, table.toUpperCase(), null).next(); } @@ -292,18 +293,20 @@ public class SQLBacking extends AbstractBacking { } List data = user.getNodes().stream().map(NodeDataHolder::fromNode).collect(Collectors.toList()); - try (PreparedStatement ps = provider.getConnection().prepareStatement(prefix.apply(USER_PERMISSIONS_INSERT))) { - for (NodeDataHolder nd : data) { - ps.setString(1, user.getUuid().toString()); - ps.setString(2, nd.getPermission()); - ps.setBoolean(3, nd.isValue()); - ps.setString(4, nd.getServer()); - ps.setString(5, nd.getWorld()); - ps.setLong(6, nd.getExpiry()); - ps.setString(7, nd.getContexts()); - ps.addBatch(); + try (Connection connection = provider.getConnection()) { + try (PreparedStatement ps = connection.prepareStatement(prefix.apply(USER_PERMISSIONS_INSERT))) { + for (NodeDataHolder nd : data) { + ps.setString(1, user.getUuid().toString()); + ps.setString(2, nd.getPermission()); + ps.setBoolean(3, nd.isValue()); + ps.setString(4, nd.getServer()); + ps.setString(5, nd.getWorld()); + ps.setLong(6, nd.getExpiry()); + ps.setString(7, nd.getContexts()); + ps.addBatch(); + } + ps.executeBatch(); } - ps.executeBatch(); } catch (SQLException e) { e.printStackTrace(); }