package me.innos.rankingmaster.data; import java.io.File; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List; import java.util.logging.Level; import org.bukkit.Bukkit; import org.bukkit.entity.Player; import me.innos.rankingmaster.Main; import me.innos.rankingmaster.user.User; public class SQLiteData implements Data { private Connection conn = null; private Statement stat = null; private String fileName; private File file; private Main inst; public SQLiteData(String fileName, Main inst) { this.inst = inst; this.fileName = fileName; file = new File(inst.getDataFolder(), this.fileName + ".db"); try { this.file.createNewFile(); } catch (IOException e) { Bukkit.getLogger().log(Level.SEVERE, "An error occured while creating database.", e); } update("CREATE TABLE IF NOT EXISTS '" + this.fileName + "'" + "(" + "uuid varchar(100)," + "points int(10)," + "kills int(10)," + "deaths int(10)," + "PRIMARY KEY (uuid)" + ");"); } @Override public void createUser(Player p) { if(!userExists(p)) { saveUser(new User(inst, p.getUniqueId().toString(), p.getName(), 1000, 0, 0)); } } @Override public void deleteUser(User u) { if(userExists(u.getPlayer())) { update("DELETE FROM " + this.fileName + " WHERE uuid = '" + u.getUuid() + "';"); } } @Override public User getUser(Player p) { ResultSet rs = query("SELECT * FROM " + this.fileName + " WHERE uuid = '" + p.getUniqueId() + "';"); try { return new User(inst, rs); } catch (SQLException e) { Bukkit.getLogger().log(Level.SEVERE, "An error occured while returning a user.", e); } return null; } @Override public boolean userExists(Player p) { ResultSet rs = query("SELECT * FROM " + this.fileName + " WHERE uuid = '" + p.getUniqueId() + "';"); return rs != null; } @Override public void saveUser(User u) { update("INSERT INTO " + fileName + " (uuid, name, points, kills, deaths) VALUES (" + u.getUuid().toString() + ", " + u.getPoints() + ", " + u.getKills() + ", " + u.getDeaths() + ")" + "ON DUPLICATE KEY UPDATE " + "uuid='" + u.getUuid().toString() + "'," + "name='" + u.getName() + "'," + "points='" + u.getPoints() + "'," + "kills='" + u.getKills() + "'," + "deaths='" + u.getDeaths() + "';"); } private ResultSet query(String query) { try { conn = DriverManager.getConnection("jdbc:sqlite:plugins/" + this.file.getParentFile().getName() + "/" + fileName + ".db"); stat = conn.createStatement(); ResultSet rs = stat.executeQuery(query); return rs; } catch (SQLException e) { Bukkit.getLogger().log(Level.SEVERE, "An error occured while executing a query.", e); } return null; } private void update(String update) { try { conn = DriverManager.getConnection("jdbc:sqlite:plugins/" + this.file.getParentFile().getName() + "/" + fileName + ".db"); stat = conn.createStatement(); stat.executeUpdate(update); stat.close(); } catch (SQLException e) { Bukkit.getLogger().log(Level.SEVERE, "An error occured while executing a update.", e); } } }