Skip to content

Commit 9be6dd6

Browse files
Fix SQLite compatibility issue with 1.8 servers
1 parent b82ba42 commit 9be6dd6

4 files changed

Lines changed: 43 additions & 10 deletions

File tree

TradeSystem-Spigot/src/main/java/de/codingair/tradesystem/spigot/database/DatabaseHandler.java

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,13 @@
22

33
import com.github.Anon8281.universalScheduler.UniversalScheduler;
44
import de.codingair.codingapi.files.ConfigFile;
5+
import de.codingair.codingapi.server.specification.Version;
56
import de.codingair.tradesystem.spigot.TradeSystem;
67
import de.codingair.tradesystem.spigot.database.migrations.SqlMigrations;
78
import de.codingair.tradesystem.spigot.database.migrations.mysql.MySQLConnection;
89
import de.codingair.tradesystem.spigot.database.migrations.mysql.MysqlMigrations;
910
import de.codingair.tradesystem.spigot.database.migrations.sqlite.SqLiteMigrations;
1011
import de.codingair.tradesystem.spigot.database.migrations.sqlite.SqlLiteConnection;
11-
import org.bukkit.Bukkit;
1212
import org.bukkit.configuration.file.FileConfiguration;
1313
import org.jetbrains.annotations.NotNull;
1414
import org.jetbrains.annotations.Nullable;
@@ -23,6 +23,20 @@ public void load() {
2323
loadType();
2424

2525
TradeSystem.log(" > Queuing database initializing task");
26+
27+
if(Version.before(9)) {
28+
// Load and register drivers manually
29+
try {
30+
Class.forName("org.sqlite.JDBC");
31+
} catch(Exception ignored) {
32+
}
33+
34+
try {
35+
Class.forName("com.mysql.jdbc.Driver");
36+
} catch(Exception ignored) {
37+
}
38+
}
39+
2640
UniversalScheduler.getScheduler(TradeSystem.getInstance()).runTaskAsynchronously(
2741
new Runnable() {
2842
@Override

TradeSystem-Spigot/src/main/java/de/codingair/tradesystem/spigot/database/migrations/SqlMigrations.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,8 +92,11 @@ private void runMigrations(@NotNull Connection connect, @NotNull String user, @N
9292

9393
for (String command : commands) {
9494
try (Statement stmt = connect.createStatement()) {
95+
System.out.println(command);
9596
stmt.execute(command);
9697
}
98+
System.out.println("Successfully executed!");
99+
Thread.sleep(1000);
97100
}
98101
}
99102

TradeSystem-Spigot/src/main/java/de/codingair/tradesystem/spigot/database/migrations/sqlite/SqLiteMigrations.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,9 @@ private SqLiteMigrations() {
2828

2929
@Override
3030
public void setVersion(@NotNull Connection connection, @NotNull String user, int version) throws Exception {
31-
try (PreparedStatement stmt = connection.prepareStatement("INSERT INTO migrations VALUES (?, ?) ON CONFLICT(user) DO UPDATE SET version=?;")) {
31+
try (PreparedStatement stmt = connection.prepareStatement("INSERT OR REPLACE INTO migrations VALUES (?, ?);")) {
3232
stmt.setString(1, user);
3333
stmt.setInt(2, version);
34-
stmt.setInt(3, version);
3534
stmt.executeUpdate();
3635
}
3736
}

TradeSystem-Spigot/src/main/java/de/codingair/tradesystem/spigot/extras/tradelog/repository/adapters/SqlLiteTradeLogRepository.java

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import java.sql.Connection;
1111
import java.sql.PreparedStatement;
1212
import java.sql.ResultSet;
13+
import java.sql.Statement;
1314
import java.time.Instant;
1415
import java.time.ZoneId;
1516
import java.util.ArrayList;
@@ -20,15 +21,31 @@ public class SqlLiteTradeLogRepository implements TradeLogRepository {
2021

2122
@Override
2223
public void registerOrUpdatePlayer(@NotNull UUID uuid, @NotNull String name) throws Exception {
23-
String sql = "INSERT INTO trade_players(uuid, name) VALUES(?,?) ON CONFLICT(uuid) DO UPDATE SET name=?;";
24+
String insertSql = "INSERT INTO trade_players(name, uuid) VALUES(?,?);";
25+
String updateSql = "UPDATE trade_players SET name = ? WHERE id = ?;";
26+
27+
try (Connection con = SqlLiteConnection.connect(); ) {
28+
int id = -1;
29+
try(PreparedStatement stmt = con.prepareStatement("SELECT id FROM trade_players WHERE uuid = ?")) {
30+
stmt.setString(1, uuid.toString());
31+
ResultSet rs = stmt.executeQuery();
32+
if(rs.next()) {
33+
id = rs.getInt("id");
34+
}
35+
}
2436

25-
try (Connection con = SqlLiteConnection.connect();
26-
PreparedStatement pstmt = con.prepareStatement(sql)) {
27-
pstmt.setString(1, uuid.toString());
28-
pstmt.setString(2, name);
29-
pstmt.setString(3, name);
37+
try(PreparedStatement pstmt = con.prepareStatement(id == -1 ? insertSql : updateSql)) {
38+
pstmt.setString(1, name);
39+
40+
if(id == -1) {
41+
pstmt.setString(2, uuid.toString());
42+
} else {
43+
pstmt.setInt(2, id);
44+
}
45+
46+
pstmt.executeUpdate();
47+
}
3048

31-
pstmt.executeUpdate();
3249
}
3350
}
3451

0 commit comments

Comments
 (0)