refactor: use try-with-resources for various world wide db operations

This commit is contained in:
P0nk
2021-04-04 23:45:40 +02:00
parent 6b6558af01
commit cb518863b0

View File

@@ -29,84 +29,43 @@ import client.MapleCharacter;
import client.MapleFamily; import client.MapleFamily;
import config.YamlConfig; import config.YamlConfig;
import constants.game.GameConstants; import constants.game.GameConstants;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.Comparator;
import java.util.LinkedList;
import java.util.List;
import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Map.Entry;
import java.util.SortedMap;
import java.util.TreeMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.Set;
import java.util.HashSet;
import java.util.PriorityQueue;
import java.util.WeakHashMap;
import java.util.concurrent.ScheduledFuture;
import scripting.event.EventInstanceManager;
import server.MapleStorage;
import server.TimerManager;
import server.maps.AbstractMapleMapObject;
import server.maps.MapleHiredMerchant;
import server.maps.MapleMap;
import server.maps.MapleMiniDungeon;
import server.maps.MapleMiniDungeonInfo;
import server.maps.MaplePlayerShop;
import server.maps.MaplePlayerShopItem;
import net.server.PlayerStorage; import net.server.PlayerStorage;
import net.server.Server; import net.server.Server;
import net.server.audit.LockCollector; import net.server.audit.LockCollector;
import net.server.audit.locks.MonitoredLockType; import net.server.audit.locks.*;
import net.server.audit.locks.MonitoredReadLock;
import net.server.audit.locks.MonitoredReentrantLock;
import net.server.audit.locks.MonitoredReentrantReadWriteLock;
import net.server.audit.locks.MonitoredWriteLock;
import net.server.audit.locks.factory.MonitoredReadLockFactory; import net.server.audit.locks.factory.MonitoredReadLockFactory;
import net.server.audit.locks.factory.MonitoredReentrantLockFactory; import net.server.audit.locks.factory.MonitoredReentrantLockFactory;
import net.server.audit.locks.factory.MonitoredWriteLockFactory; import net.server.audit.locks.factory.MonitoredWriteLockFactory;
import net.server.channel.Channel; import net.server.channel.Channel;
import net.server.channel.CharacterIdChannelPair; import net.server.channel.CharacterIdChannelPair;
import net.server.coordinator.matchchecker.MapleMatchCheckerCoordinator;
import net.server.coordinator.partysearch.MaplePartySearchCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator; import net.server.coordinator.world.MapleInviteCoordinator;
import net.server.coordinator.world.MapleInviteCoordinator.InviteResult; import net.server.coordinator.world.MapleInviteCoordinator.InviteResult;
import net.server.coordinator.world.MapleInviteCoordinator.InviteType; import net.server.coordinator.world.MapleInviteCoordinator.InviteType;
import net.server.coordinator.matchchecker.MapleMatchCheckerCoordinator;
import net.server.coordinator.partysearch.MaplePartySearchCoordinator;
import net.server.guild.MapleGuild; import net.server.guild.MapleGuild;
import net.server.guild.MapleGuildCharacter; import net.server.guild.MapleGuildCharacter;
import net.server.guild.MapleGuildSummary; import net.server.guild.MapleGuildSummary;
import net.server.services.BaseService; import net.server.services.BaseService;
import net.server.services.ServicesManager; import net.server.services.ServicesManager;
import net.server.services.type.WorldServices; import net.server.services.type.WorldServices;
import net.server.task.CharacterAutosaverTask; import net.server.task.*;
import net.server.task.FamilyDailyResetTask; import scripting.event.EventInstanceManager;
import net.server.task.FishingTask; import server.MapleStorage;
import net.server.task.HiredMerchantTask; import server.TimerManager;
import net.server.task.MapOwnershipTask; import server.maps.*;
import net.server.task.MountTirednessTask;
import net.server.task.PartySearchTask;
import net.server.task.PetFullnessTask;
import net.server.task.ServerMessageTask;
import net.server.task.TimedMapObjectTask;
import net.server.task.TimeoutTask;
import net.server.task.WeddingReservationTask;
import tools.DatabaseConnection; import tools.DatabaseConnection;
import tools.MaplePacketCreator; import tools.MaplePacketCreator;
import tools.Pair; import tools.Pair;
import tools.packets.Fishing; import tools.packets.Fishing;
import java.sql.*;
import java.util.*;
import java.util.Map.Entry;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ScheduledFuture;
import java.util.concurrent.atomic.AtomicInteger;
/** /**
* *
* @author kevintjuh93 * @author kevintjuh93
@@ -693,16 +652,12 @@ public class World {
} }
public void setOfflineGuildStatus(int guildid, int guildrank, int cid) { public void setOfflineGuildStatus(int guildid, int guildrank, int cid) {
try { try (Connection con = DatabaseConnection.getConnection();
Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("UPDATE characters SET guildid = ?, guildrank = ? WHERE id = ?")) {
try (PreparedStatement ps = con.prepareStatement("UPDATE characters SET guildid = ?, guildrank = ? WHERE id = ?")) { ps.setInt(1, guildid);
ps.setInt(1, guildid); ps.setInt(2, guildrank);
ps.setInt(2, guildrank); ps.setInt(3, cid);
ps.setInt(3, cid); ps.executeUpdate();
ps.execute();
}
con.close();
} catch (SQLException se) { } catch (SQLException se) {
se.printStackTrace(); se.printStackTrace();
} }
@@ -1808,42 +1763,42 @@ public class World {
} }
private static void executePlayerNpcMapDataUpdate(Connection con, boolean isPodium, Map<Integer, ?> pnpcData, int value, int worldid, int mapid) throws SQLException { private static void executePlayerNpcMapDataUpdate(Connection con, boolean isPodium, Map<Integer, ?> pnpcData, int value, int worldid, int mapid) throws SQLException {
PreparedStatement ps; final String query;
if(pnpcData.containsKey(mapid)) { if (pnpcData.containsKey(mapid)) {
ps = con.prepareStatement("UPDATE playernpcs_field SET " + (isPodium ? "podium" : "step") + " = ? WHERE world = ? AND map = ?"); query = "UPDATE playernpcs_field SET " + (isPodium ? "podium" : "step") + " = ? WHERE world = ? AND map = ?";
} else { } else {
ps = con.prepareStatement("INSERT INTO playernpcs_field (" + (isPodium ? "podium" : "step") + ", world, map) VALUES (?, ?, ?)"); query = "INSERT INTO playernpcs_field (" + (isPodium ? "podium" : "step") + ", world, map) VALUES (?, ?, ?)";
} }
ps.setInt(1, value); try (PreparedStatement ps = con.prepareStatement(query)) {
ps.setInt(2, worldid); ps.setInt(1, value);
ps.setInt(3, mapid); ps.setInt(2, worldid);
ps.executeUpdate(); ps.setInt(3, mapid);
ps.executeUpdate();
ps.close(); }
} }
private void setPlayerNpcMapData(int mapid, int step, int podium, boolean silent) { private void setPlayerNpcMapData(int mapid, int step, int podium, boolean silent) {
if(!silent) { if (!silent) {
try { try (Connection con = DatabaseConnection.getConnection()) {
Connection con = DatabaseConnection.getConnection(); if (step != -1) {
if(step != -1) {
executePlayerNpcMapDataUpdate(con, false, pnpcStep, step, id, mapid); executePlayerNpcMapDataUpdate(con, false, pnpcStep, step, id, mapid);
} }
if(podium != -1) { if (podium != -1) {
executePlayerNpcMapDataUpdate(con, true, pnpcPodium, podium, id, mapid); executePlayerNpcMapDataUpdate(con, true, pnpcPodium, podium, id, mapid);
} }
con.close();
} catch (SQLException e) { } catch (SQLException e) {
e.printStackTrace(); e.printStackTrace();
} }
} }
if(step != -1) pnpcStep.put(mapid, (byte) step); if (step != -1) {
if(podium != -1) pnpcPodium.put(mapid, (short) podium); pnpcStep.put(mapid, (byte) step);
}
if (podium != -1) {
pnpcPodium.put(mapid, (short) podium);
}
} }
public int getPlayerNpcMapStep(int mapid) { public int getPlayerNpcMapStep(int mapid) {
@@ -1945,12 +1900,11 @@ public class World {
} }
private static Pair<Integer, Pair<Integer, Integer>> getRelationshipCoupleFromDb(int id, boolean usingMarriageId) { private static Pair<Integer, Pair<Integer, Integer>> getRelationshipCoupleFromDb(int id, boolean usingMarriageId) {
try { try (Connection con = DatabaseConnection.getConnection()) {
Connection con = DatabaseConnection.getConnection();
Integer mid = null, hid = null, wid = null; Integer mid = null, hid = null, wid = null;
PreparedStatement ps; PreparedStatement ps;
if(usingMarriageId) { if (usingMarriageId) {
ps = con.prepareStatement("SELECT * FROM marriages WHERE marriageid = ?"); ps = con.prepareStatement("SELECT * FROM marriages WHERE marriageid = ?");
ps.setInt(1, id); ps.setInt(1, id);
} else { } else {
@@ -1958,18 +1912,17 @@ public class World {
ps.setInt(1, id); ps.setInt(1, id);
ps.setInt(2, id); ps.setInt(2, id);
} }
ResultSet rs = ps.executeQuery(); try (ResultSet rs = ps.executeQuery()) {
if(rs.next()) { if (rs.next()) {
mid = rs.getInt("marriageid"); mid = rs.getInt("marriageid");
hid = rs.getInt("husbandid"); hid = rs.getInt("husbandid");
wid = rs.getInt("wifeid"); wid = rs.getInt("wifeid");
}
} }
rs.close();
ps.close(); ps.close();
con.close();
return (mid == null) ? null : new Pair<>(mid, new Pair<>(hid, wid)); return (mid == null) ? null : new Pair<>(mid, new Pair<>(hid, wid));
} catch (SQLException se) { } catch (SQLException se) {
se.printStackTrace(); se.printStackTrace();
@@ -1985,22 +1938,17 @@ public class World {
} }
private static int addRelationshipToDb(int groomId, int brideId) { private static int addRelationshipToDb(int groomId, int brideId) {
try { try (Connection con = DatabaseConnection.getConnection();
Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("INSERT INTO marriages (husbandid, wifeid) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS)) {
PreparedStatement ps = con.prepareStatement("INSERT INTO marriages (husbandid, wifeid) VALUES (?, ?)", Statement.RETURN_GENERATED_KEYS);
ps.setInt(1, groomId); ps.setInt(1, groomId);
ps.setInt(2, brideId); ps.setInt(2, brideId);
ps.executeUpdate(); ps.executeUpdate();
ResultSet rs = ps.getGeneratedKeys(); try (ResultSet rs = ps.getGeneratedKeys()) {
rs.next(); rs.next();
int ret = rs.getInt(1); int ret = rs.getInt(1);
return ret;
rs.close(); }
ps.close();
con.close();
return ret;
} catch (SQLException se) { } catch (SQLException se) {
se.printStackTrace(); se.printStackTrace();
return -1; return -1;
@@ -2017,14 +1965,10 @@ public class World {
} }
private static void deleteRelationshipFromDb(int playerId) { private static void deleteRelationshipFromDb(int playerId) {
try { try (Connection con = DatabaseConnection.getConnection();
Connection con = DatabaseConnection.getConnection(); PreparedStatement ps = con.prepareStatement("DELETE FROM marriages WHERE marriageid = ?")) {
PreparedStatement ps = con.prepareStatement("DELETE FROM marriages WHERE marriageid = ?");
ps.setInt(1, playerId); ps.setInt(1, playerId);
ps.executeUpdate(); ps.executeUpdate();
ps.close();
con.close();
} catch (SQLException se) { } catch (SQLException se) {
se.printStackTrace(); se.printStackTrace();
} }