From 02256e04edc6b148080acf8651726c646d80943a Mon Sep 17 00:00:00 2001 From: P0nk Date: Tue, 6 Apr 2021 20:42:54 +0200 Subject: [PATCH 1/2] Fix SQL type conversion error during ranking move update Caused by prior upgrade to MySQL 8 which seems more strict when it comes to type conversions. --- src/main/java/net/server/task/RankingLoginTask.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/net/server/task/RankingLoginTask.java b/src/main/java/net/server/task/RankingLoginTask.java index 0828158c67..97ae96c220 100644 --- a/src/main/java/net/server/task/RankingLoginTask.java +++ b/src/main/java/net/server/task/RankingLoginTask.java @@ -68,7 +68,9 @@ public class RankingLoginTask implements Runnable { while (rs.next()) { int rankMove = 0; rank++; - if (rs.getLong("lastlogin") < lastUpdate || rs.getInt("loggedin") > 0) { + + final long lastlogin = rs.getTimestamp("lastlogin").getTime(); + if (lastlogin < lastUpdate || rs.getInt("loggedin") > 0) { rankMove = rs.getInt((job != -1 ? "jobRankMove" : "rankMove")); } rankMove += rs.getInt((job != -1 ? "jobRank" : "rank")) - rank; From 2f34b3ed8ba879c491d40cf011f8b5432667fcdf Mon Sep 17 00:00:00 2001 From: P0nk Date: Tue, 6 Apr 2021 21:09:07 +0200 Subject: [PATCH 2/2] Fix ranking update query using a keyword for field name "Rank" is a reserved keyword in MySQL 8. This caused an SQLSyntaxErrorException during the task run. --- src/main/java/net/server/task/RankingLoginTask.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/net/server/task/RankingLoginTask.java b/src/main/java/net/server/task/RankingLoginTask.java index 97ae96c220..f609275f46 100644 --- a/src/main/java/net/server/task/RankingLoginTask.java +++ b/src/main/java/net/server/task/RankingLoginTask.java @@ -48,7 +48,7 @@ public class RankingLoginTask implements Runnable { } private void updateRanking(int job, int world) throws SQLException { - String sqlCharSelect = "SELECT c.id, " + (job != -1 ? "c.jobRank, c.jobRankMove" : "c.rank, c.rankMove") + ", a.lastlogin AS lastlogin, a.loggedin FROM characters AS c LEFT JOIN accounts AS a ON c.accountid = a.id WHERE c.gm < 2 AND c.world = ? "; + String sqlCharSelect = "SELECT c.id, " + (job != -1 ? "c.jobRank, c.jobRankMove" : "c.`rank`, c.rankMove") + ", a.lastlogin AS lastlogin, a.loggedin FROM characters AS c LEFT JOIN accounts AS a ON c.accountid = a.id WHERE c.gm < 2 AND c.world = ? "; if (job != -1) { sqlCharSelect += "AND c.job DIV 100 = ? "; } @@ -62,7 +62,7 @@ public class RankingLoginTask implements Runnable { } try (ResultSet rs = charSelect.executeQuery(); - PreparedStatement ps = con.prepareStatement("UPDATE characters SET " + (job != -1 ? "jobRank = ?, jobRankMove = ? " : "rank = ?, rankMove = ? ") + "WHERE id = ?")) { + PreparedStatement ps = con.prepareStatement("UPDATE characters SET " + (job != -1 ? "jobRank = ?, jobRankMove = ? " : "`rank` = ?, rankMove = ? ") + "WHERE id = ?")) { int rank = 0; while (rs.next()) {