refactor: use try-with-resources for monster book db operations

This commit is contained in:
P0nk
2021-04-04 23:26:15 +02:00
parent 9d70f4de04
commit 59014b86bf

View File

@@ -21,22 +21,19 @@
*/ */
package client; package client;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import tools.DatabaseConnection;
import tools.MaplePacketCreator;
import java.sql.Connection; import java.sql.Connection;
import java.sql.PreparedStatement; import java.sql.PreparedStatement;
import java.sql.ResultSet; import java.sql.ResultSet;
import java.sql.SQLException; import java.sql.SQLException;
import java.util.Collections; import java.util.*;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry; import java.util.Map.Entry;
import java.util.HashSet;
import java.util.Set;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.Semaphore; import java.util.concurrent.Semaphore;
import tools.DatabaseConnection; import java.util.concurrent.locks.Lock;
import tools.MaplePacketCreator;
import net.server.audit.locks.MonitoredLockType;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
public final class MonsterBook { public final class MonsterBook {
private static final Semaphore semaphore = new Semaphore(10); private static final Semaphore semaphore = new Semaphore(10);
@@ -158,12 +155,13 @@ public final class MonsterBook {
public void loadCards(final int charid) throws SQLException { public void loadCards(final int charid) throws SQLException {
lock.lock(); lock.lock();
try { try (Connection con = DatabaseConnection.getConnection();
Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("SELECT cardid, level FROM monsterbook WHERE charid = ? ORDER BY cardid ASC")) {
try (PreparedStatement ps = con.prepareStatement("SELECT cardid, level FROM monsterbook WHERE charid = ? ORDER BY cardid ASC")) {
ps.setInt(1, charid); ps.setInt(1, charid);
try (ResultSet rs = ps.executeQuery()) { try (ResultSet rs = ps.executeQuery()) {
int cardid, level; int cardid;
int level;
while (rs.next()) { while (rs.next()) {
cardid = rs.getInt("cardid"); cardid = rs.getInt("cardid");
level = rs.getInt("level"); level = rs.getInt("level");
@@ -175,9 +173,6 @@ public final class MonsterBook {
cards.put(cardid, level); cards.put(cardid, level);
} }
} }
}
con.close();
} finally { } finally {
lock.unlock(); lock.unlock();
} }
@@ -228,29 +223,25 @@ public final class MonsterBook {
if (cardSet.isEmpty()) { if (cardSet.isEmpty()) {
return; return;
} }
try {
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("DELETE FROM monsterbook WHERE charid = ?");
ps.setInt(1, charid);
ps.execute();
ps.close();
ps = con.prepareStatement(getSaveString(charid, cardSet)); try (Connection con = DatabaseConnection.getConnection()) {
ps.execute(); try (PreparedStatement ps = con.prepareStatement("DELETE FROM monsterbook WHERE charid = ?")) {
ps.close(); ps.setInt(1, charid);
con.close(); ps.executeUpdate();
}
try (PreparedStatement ps = con.prepareStatement(getSaveString(charid, cardSet))) {
ps.executeUpdate();
}
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
public static int[] getCardTierSize() { public static int[] getCardTierSize() {
try { try (Connection con = DatabaseConnection.getConnection();
Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM monstercarddata GROUP BY floor(cardid / 1000);", ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
PreparedStatement ps = con.prepareStatement("SELECT COUNT(*) FROM monstercarddata GROUP BY floor(cardid / 1000);", ResultSet rs = ps.executeQuery()) {
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
ResultSet rs = ps.executeQuery();
rs.last(); rs.last();
int[] tierSizes = new int[rs.getRow()]; int[] tierSizes = new int[rs.getRow()];
rs.beforeFirst(); rs.beforeFirst();
@@ -259,10 +250,6 @@ public final class MonsterBook {
tierSizes[rs.getRow() - 1] = rs.getInt(1); tierSizes[rs.getRow() - 1] = rs.getInt(1);
} }
rs.close();
ps.close();
con.close();
return tierSizes; return tierSizes;
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();