package net.scapeemulator.game.io.jdbc; import java.io.IOException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import net.scapeemulator.game.model.player.Player; import net.scapeemulator.game.model.player.skills.Skill; import net.scapeemulator.game.model.player.skills.SkillSet; public final class SkillsTable extends Table<Player> { private final PreparedStatement loadStatement; private final PreparedStatement saveStatement; public SkillsTable(Connection connection) throws SQLException { this.loadStatement = connection.prepareStatement("SELECT * FROM skills WHERE player_id = ?;"); this.saveStatement = connection.prepareStatement("INSERT INTO skills (player_id, skill, lvl, xp) VALUES (?, ?, ?, ?) ON DUPLICATE KEY UPDATE lvl = VALUES(lvl), xp = VALUES(xp);"); } @Override public void load(Player player) throws SQLException, IOException { loadStatement.setInt(1, player.getDatabaseId()); SkillSet skills = player.getSkillSet(); try (ResultSet set = loadStatement.executeQuery()) { while (set.next()) { String skill = set.getString("skill"); int lvl = set.getInt("lvl"); double xp = set.getDouble("xp"); for(int i = 0; i < Skill.SKILL_NAMES.length; i++) { if(Skill.SKILL_NAMES[i].equals(skill)) { skills.setCurrentLevel(i, lvl); skills.setExperience(i, xp); break; } } } } } @Override public void save(Player player) throws SQLException, IOException { saveStatement.setInt(1, player.getDatabaseId()); SkillSet skills = player.getSkillSet(); for (int i = 0; i < Skill.SKILL_NAMES.length; i++) { saveStatement.setString(2, Skill.SKILL_NAMES[i]); saveStatement.setInt(3, skills.getCurrentLevel(i)); saveStatement.setDouble(4, skills.getExperience(i)); saveStatement.addBatch(); } saveStatement.executeBatch(); } }