Переписываю плагин SkyClaims для работы с MySql так как база SqlLite у меня уже несколько раз ломалась.
Есть такой код
String sql = "REPLACE INTO islands(island, owner, claim, spawnX, spawnY, spawnZ, locked) VALUES(?, ?, ?, ?, ?, ?, ?)";
MySQL MySQL = new MySQL(ConnectData.host, ConnectData.port, ConnectData.dbName, ConnectData.username, ConnectData.pass);
Connection c = MySQL.openConnection();
try(PreparedStatement statement = MySQL.getConnection().prepareStatement(sql)) {
statement.setString(1, island.getUniqueId().toString());
statement.setString(2, island.getOwnerUniqueId().toString());
statement.setString(3, island.getClaimUniqueId().toString());
statement.setInt(4, island.getSpawn().getLocation().getBlockX());
statement.setInt(5, island.getSpawn().getLocation().getBlockY());
statement.setInt(6, island.getSpawn().getLocation().getBlockZ());
statement.setBoolean(7, island.isLocked());
statement.execute();
c.close();
} catch (SQLException e) {
SkyClaims.getInstance().getLogger()
.error("Error inserting Island into the database: {}", e.getMessage());
}
Плагин вызывает ображение к БД дважды при создании острова и 1 раз при каждом вводе команды /is setspawn. Проблема в том, что при установке точки спавна старая запись не заменяется новой, а все так же висит в БД. Разработчик плагина сделал костыль для работы с SqlLite который и подчищает это каждый раз, вот только похожу что этот костыль периодически может терять данные в процессе работы(возможно хеш теряется, выкидывается чем-то другим, я хз).
Думаю надо сам запрос к БД изменить, но я в MySql не шарю, хотя конект и все прочее накатал.