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,30 +155,28 @@ 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;
while (rs.next()) { int level;
cardid = rs.getInt("cardid"); while (rs.next()) {
level = rs.getInt("level"); cardid = rs.getInt("cardid");
if (cardid / 1000 >= 2388) { level = rs.getInt("level");
specialCard++; if (cardid / 1000 >= 2388) {
} else { specialCard++;
normalCard++; } else {
} normalCard++;
cards.put(cardid, level);
} }
cards.put(cardid, level);
} }
} }
con.close();
} finally { } finally {
lock.unlock(); lock.unlock();
} }
calculateLevel(); calculateLevel();
} }
@@ -224,45 +219,37 @@ public final class MonsterBook {
public void saveCards(final int charid) { public void saveCards(final int charid) {
Set<Entry<Integer, Integer>> cardSet = getCardSet(); Set<Entry<Integer, Integer>> cardSet = getCardSet();
if (cardSet.isEmpty()) { if (cardSet.isEmpty()) {
return; return;
} }
try {
Connection con = DatabaseConnection.getConnection(); try (Connection con = DatabaseConnection.getConnection()) {
PreparedStatement ps = con.prepareStatement("DELETE FROM monsterbook WHERE charid = ?"); try (PreparedStatement ps = con.prepareStatement("DELETE FROM monsterbook WHERE charid = ?")) {
ps.setInt(1, charid); ps.setInt(1, charid);
ps.execute(); ps.executeUpdate();
ps.close(); }
ps = con.prepareStatement(getSaveString(charid, cardSet)); try (PreparedStatement ps = con.prepareStatement(getSaveString(charid, cardSet))) {
ps.execute(); ps.executeUpdate();
ps.close(); }
con.close();
} 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();
while (rs.next()) { while (rs.next()) {
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();