refactor: use try-with-resources for BBS db operations

This commit is contained in:
P0nk
2021-04-04 14:40:15 +02:00
parent 0ccea05129
commit 6639188c5a

View File

@@ -23,15 +23,16 @@ package net.server.channel.handlers;
import client.MapleCharacter;
import client.MapleClient;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import net.AbstractMaplePacketHandler;
import tools.DatabaseConnection;
import tools.MaplePacketCreator;
import tools.data.input.SeekableLittleEndianAccessor;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public final class BBSOperationHandler extends AbstractMaplePacketHandler {
private String correctLength(String in, int maxSize) {
@@ -96,17 +97,14 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
}
private static void listBBSThreads(MapleClient c, int start) {
try {
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM bbs_threads WHERE guildid = ? ORDER BY localthreadid DESC",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
ps.setInt(1, c.getPlayer().getGuildId());
try (ResultSet rs = ps.executeQuery()) {
c.announce(MaplePacketCreator.BBSThreadList(rs, start));
}
try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT * FROM bbs_threads WHERE guildid = ? ORDER BY localthreadid DESC",
ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY)) {
ps.setInt(1, c.getPlayer().getGuildId());
try (ResultSet rs = ps.executeQuery()) {
c.announce(MaplePacketCreator.BBSThreadList(rs, start));
}
con.close();
} catch (SQLException se) {
se.printStackTrace();
}
@@ -116,33 +114,34 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
if (c.getPlayer().getGuildId() <= 0) {
return;
}
Connection con = null;
try {
con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT threadid FROM bbs_threads WHERE guildid = ? AND localthreadid = ?");
ps.setInt(1, c.getPlayer().getGuildId());
ps.setInt(2, localthreadid);
ResultSet threadRS = ps.executeQuery();
if (!threadRS.next()) {
threadRS.close();
ps.close();
return;
try (Connection con = DatabaseConnection.getConnection()) {
final int threadid;
try (PreparedStatement ps = con.prepareStatement("SELECT threadid FROM bbs_threads WHERE guildid = ? AND localthreadid = ?")) {
ps.setInt(1, c.getPlayer().getGuildId());
ps.setInt(2, localthreadid);
try (ResultSet threadRS = ps.executeQuery()) {
if (!threadRS.next()) {
return;
}
threadid = threadRS.getInt("threadid");
}
}
int threadid = threadRS.getInt("threadid");
threadRS.close();
ps.close();
ps = con.prepareStatement("INSERT INTO bbs_replies " + "(`threadid`, `postercid`, `timestamp`, `content`) VALUES " + "(?, ?, ?, ?)");
ps.setInt(1, threadid);
ps.setInt(2, c.getPlayer().getId());
ps.setLong(3, currentServerTime());
ps.setString(4, text);
ps.execute();
ps.close();
ps = con.prepareStatement("UPDATE bbs_threads SET replycount = replycount + 1 WHERE threadid = ?");
ps.setInt(1, threadid);
ps.execute();
ps.close();
con.close();
try (PreparedStatement ps = con.prepareStatement("INSERT INTO bbs_replies " + "(`threadid`, `postercid`, `timestamp`, `content`) VALUES " + "(?, ?, ?, ?)")) {
ps.setInt(1, threadid);
ps.setInt(2, c.getPlayer().getId());
ps.setLong(3, currentServerTime());
ps.setString(4, text);
ps.executeUpdate();
}
try (PreparedStatement ps = con.prepareStatement("UPDATE bbs_threads SET replycount = replycount + 1 WHERE threadid = ?")) {
ps.setInt(1, threadid);
ps.executeUpdate();
}
displayThread(c, localthreadid);
} catch (SQLException se) {
se.printStackTrace();
@@ -154,20 +153,19 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
if (chr.getGuildId() < 1) {
return;
}
try {
Connection con = DatabaseConnection.getConnection();
try (PreparedStatement ps = con.prepareStatement("UPDATE bbs_threads SET `name` = ?, `timestamp` = ?, " + "`icon` = ?, " + "`startpost` = ? WHERE guildid = ? AND localthreadid = ? AND (postercid = ? OR ?)")) {
ps.setString(1, title);
ps.setLong(2, currentServerTime());
ps.setInt(3, icon);
ps.setString(4, text);
ps.setInt(5, chr.getGuildId());
ps.setInt(6, localthreadid);
ps.setInt(7, chr.getId());
ps.setBoolean(8, chr.getGuildRank() < 3);
ps.execute();
}
con.close();
try (Connection con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("UPDATE bbs_threads SET `name` = ?, `timestamp` = ?, " + "`icon` = ?, " + "`startpost` = ? WHERE guildid = ? AND localthreadid = ? AND (postercid = ? OR ?)")) {
ps.setString(1, title);
ps.setLong(2, currentServerTime());
ps.setInt(3, icon);
ps.setString(4, text);
ps.setInt(5, chr.getGuildId());
ps.setInt(6, localthreadid);
ps.setInt(7, chr.getId());
ps.setBoolean(8, chr.getGuildRank() < 3);
ps.execute();
displayThread(client, localthreadid);
} catch (SQLException se) {
se.printStackTrace();
@@ -180,29 +178,28 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
return;
}
int nextId = 0;
try {
Connection con = DatabaseConnection.getConnection();
PreparedStatement ps;
try (Connection con = DatabaseConnection.getConnection()) {
if (!bNotice) {
ps = con.prepareStatement("SELECT MAX(localthreadid) AS lastLocalId FROM bbs_threads WHERE guildid = ?");
ps.setInt(1, chr.getGuildId());
try (ResultSet rs = ps.executeQuery()) {
rs.next();
nextId = rs.getInt("lastLocalId") + 1;
try (PreparedStatement ps = con.prepareStatement("SELECT MAX(localthreadid) AS lastLocalId FROM bbs_threads WHERE guildid = ?")) {
ps.setInt(1, chr.getGuildId());
try (ResultSet rs = ps.executeQuery()) {
rs.next();
nextId = rs.getInt("lastLocalId") + 1;
}
}
ps.close();
}
ps = con.prepareStatement("INSERT INTO bbs_threads " + "(`postercid`, `name`, `timestamp`, `icon`, `startpost`, " + "`guildid`, `localthreadid`) " + "VALUES(?, ?, ?, ?, ?, ?, ?)");
ps.setInt(1, chr.getId());
ps.setString(2, title);
ps.setLong(3, currentServerTime());
ps.setInt(4, icon);
ps.setString(5, text);
ps.setInt(6, chr.getGuildId());
ps.setInt(7, nextId);
ps.execute();
ps.close();
con.close();
try (PreparedStatement ps = con.prepareStatement("INSERT INTO bbs_threads (`postercid`, `name`, `timestamp`, `icon`, `startpost`, `guildid`, `localthreadid`) VALUES(?, ?, ?, ?, ?, ?, ?)")) {
ps.setInt(1, chr.getId());
ps.setString(2, title);
ps.setLong(3, currentServerTime());
ps.setInt(4, icon);
ps.setString(5, text);
ps.setInt(6, chr.getGuildId());
ps.setInt(7, nextId);
ps.executeUpdate();
}
displayThread(client, nextId);
} catch (SQLException se) {
se.printStackTrace();
@@ -215,35 +212,36 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
if (mc.getGuildId() <= 0) {
return;
}
Connection con = null;
try {
con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT threadid, postercid FROM bbs_threads WHERE guildid = ? AND localthreadid = ?");
ps.setInt(1, mc.getGuildId());
ps.setInt(2, localthreadid);
ResultSet threadRS = ps.executeQuery();
if (!threadRS.next()) {
threadRS.close();
ps.close();
return;
try (Connection con = DatabaseConnection.getConnection()) {
final int threadid;
try (PreparedStatement ps = con.prepareStatement("SELECT threadid, postercid FROM bbs_threads WHERE guildid = ? AND localthreadid = ?")) {
ps.setInt(1, mc.getGuildId());
ps.setInt(2, localthreadid);
try (ResultSet threadRS = ps.executeQuery()) {
if (!threadRS.next()) {
return;
}
if (mc.getId() != threadRS.getInt("postercid") && mc.getGuildRank() > 2) {
return;
}
threadid = threadRS.getInt("threadid");
}
}
if (mc.getId() != threadRS.getInt("postercid") && mc.getGuildRank() > 2) {
threadRS.close();
ps.close();
return;
try (PreparedStatement ps = con.prepareStatement("DELETE FROM bbs_replies WHERE threadid = ?")) {
ps.setInt(1, threadid);
ps.executeUpdate();
}
try (PreparedStatement ps = con.prepareStatement("DELETE FROM bbs_threads WHERE threadid = ?")) {
ps.setInt(1, threadid);
ps.executeUpdate();
}
int threadid = threadRS.getInt("threadid");
ps.close();
ps = con.prepareStatement("DELETE FROM bbs_replies WHERE threadid = ?");
ps.setInt(1, threadid);
ps.execute();
ps.close();
ps = con.prepareStatement("DELETE FROM bbs_threads WHERE threadid = ?");
ps.setInt(1, threadid);
ps.execute();
threadRS.close();
ps.close();
con.close();
} catch (SQLException se) {
se.printStackTrace();
}
@@ -254,35 +252,36 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
if (mc.getGuildId() <= 0) {
return;
}
int threadid;
Connection con = null;
try {
con = DatabaseConnection.getConnection();
PreparedStatement ps = con.prepareStatement("SELECT postercid, threadid FROM bbs_replies WHERE replyid = ?");
ps.setInt(1, replyid);
ResultSet rs = ps.executeQuery();
if (!rs.next()) {
rs.close();
ps.close();
return;
final int threadid;
try (Connection con = DatabaseConnection.getConnection()) {
try (PreparedStatement ps = con.prepareStatement("SELECT postercid, threadid FROM bbs_replies WHERE replyid = ?")) {
ps.setInt(1, replyid);
try (ResultSet rs = ps.executeQuery()) {
if (!rs.next()) {
return;
}
if (mc.getId() != rs.getInt("postercid") && mc.getGuildRank() > 2) {
return;
}
threadid = rs.getInt("threadid");
}
}
if (mc.getId() != rs.getInt("postercid") && mc.getGuildRank() > 2) {
rs.close();
ps.close();
return;
try (PreparedStatement ps = con.prepareStatement("DELETE FROM bbs_replies WHERE replyid = ?")) {
ps.setInt(1, replyid);
ps.executeUpdate();
}
threadid = rs.getInt("threadid");
rs.close();
ps.close();
ps = con.prepareStatement("DELETE FROM bbs_replies WHERE replyid = ?");
ps.setInt(1, replyid);
ps.execute();
ps.close();
ps = con.prepareStatement("UPDATE bbs_threads SET replycount = replycount - 1 WHERE threadid = ?");
ps.setInt(1, threadid);
ps.execute();
ps.close();
con.close();
try (PreparedStatement ps = con.prepareStatement("UPDATE bbs_threads SET replycount = replycount - 1 WHERE threadid = ?")) {
ps.setInt(1, threadid);
ps.executeUpdate();
}
displayThread(client, threadid, false);
} catch (SQLException se) {
se.printStackTrace();
@@ -298,9 +297,9 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
if (mc.getGuildId() <= 0) {
return;
}
Connection con;
try {
con = DatabaseConnection.getConnection();
try (Connection con = DatabaseConnection.getConnection()) {
// TODO clean up this block and use try-with-resources
PreparedStatement ps2;
try (PreparedStatement ps = con.prepareStatement("SELECT * FROM bbs_threads WHERE guildid = ? AND " + (bIsThreadIdLocal ? "local" : "") + "threadid = ?")) {
ps.setInt(1, mc.getGuildId());
@@ -324,8 +323,6 @@ public final class BBSOperationHandler extends AbstractMaplePacketHandler {
if (ps2 != null) {
ps2.close();
}
con.close();
} catch (SQLException se) {
se.printStackTrace();
} catch (RuntimeException re) {//btw we get this everytime for some reason, but replies work!