1.15.2 This is okay?

Discussion in 'Spigot Plugin Development' started by yurinogueira, Mar 25, 2020.

  1. I am making an economy system and I am using mysql and sqlite. Is it good the way it is? Or can it end up causing problems?

    Code (Java):
    package eternia.api;

    import eternia.EterniaServer;
    import eternia.configs.Vars;
    import eternia.player.PlayerManager;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.UUID;

    public class MoneyAPI {

        public static double getMoney(UUID uuid) {
            if (Vars.money.containsKey(uuid.toString())) {
                return Vars.money.get(uuid.toString());
            }
            double i = 0;
            if (PlayerManager.PlayerExist(uuid)) {
                try {
                    final ResultSet rs = EterniaServer.sqlcon.Query("SELECT * FROM eternia WHERE UUID='" + uuid.toString() + "';");
                    if (rs.next()) {
                        rs.getDouble("BALANCE");
                    }
                    i = rs.getDouble("BALANCE");
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            } else {
                PlayerManager.CreatePlayer(uuid);
                getMoney(uuid);
            }
            Vars.money.put(uuid.toString(), i);
            return i;
        }

        public static boolean hasMoney(UUID uuid, double Money) {
            return getMoney(uuid) >= Money;
        }

        public static void setMoney(UUID uuid, double Money) {
            if (PlayerManager.PlayerExist(uuid)) {
                Vars.money.remove(uuid.toString());
                Vars.money.put(uuid.toString(), Money);
                EterniaServer.sqlcon.Update("UPDATE eternia SET BALANCE='" + Money + "' WHERE UUID='" + uuid.toString() + "';");
            } else {
                PlayerManager.CreatePlayer(uuid);
                setMoney(uuid, Money);
            }
        }

        public static void addMoney(UUID uuid, double money) {
            if (PlayerManager.PlayerExist(uuid)) {
                setMoney(uuid, getMoney(uuid) + money);
            } else {
                PlayerManager.CreatePlayer(uuid);
                addMoney(uuid, getMoney(uuid) + money);
            }
        }

        public static void removeMoney(UUID uuid, double money) {
            if (PlayerManager.PlayerExist(uuid)) {
                money = getMoney(uuid) - money;
                setMoney(uuid, money);
            } else {
                PlayerManager.CreatePlayer(uuid);
                money = getMoney(uuid) - money;
                removeMoney(uuid, money);
            }
        }

    }

    Code (Java):
    package eternia.storage.sqlsetup;

    import eternia.EterniaServer;
    import eternia.configs.MVar;
    import org.bukkit.Bukkit;

    import java.io.File;
    import java.sql.*;

    public class Queries {
        private String HOST;
        private String DATABASE;
        private String USER;
        private String PASSWORD;
        private Connection con;
        private final boolean mysql;

        public Queries(final String host, final String database, final String user, final String password, final boolean mysql) {
            this.HOST = "";
            this.DATABASE = "";
            this.USER = "";
            this.PASSWORD = "";
            this.HOST = host;
            this.DATABASE = database;
            this.USER = user;
            this.PASSWORD = password;
            this.mysql = mysql;
            this.Connect();
        }

        public void Connect() {
            if (mysql) {
                try {
                    this.con = DriverManager.getConnection("jdbc:mysql://" + this.HOST + ":3306/" + this.DATABASE + "?autoReconnect=true", this.USER, this.PASSWORD);
                    MVar.consoleMessage("conectado-sucesso-mysql");
                } catch (SQLException e) {
                    MVar.consoleReplaceMessage("erro-sql", e.getMessage());
                }
            } else {
                try {
                    File dataFolder = new File(EterniaServer.getMain().getDataFolder(), "eternia.db");
                    this.con = DriverManager.getConnection("jdbc:sqlite:" + dataFolder);
                    MVar.consoleMessage("conectado-sucesso-sql");
                } catch (SQLException e) {
                    MVar.consoleReplaceMessage("erro-sql", e.getMessage());
                }
            }
        }

        public void Close() {
            try {
                if (this.con != null) {
                    this.con.close();
                    MVar.consoleMessage("conecao-sql");
                }
            } catch (SQLException e) {
                MVar.consoleReplaceMessage("erro-sql", e.getMessage());
            }
        }

        public void Update(final String sql) {
            Bukkit.getScheduler().runTaskAsynchronously(EterniaServer.getMain(), () -> {
                try {
                    con.createStatement().executeUpdate(sql);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            });
        }

        public ResultSet Query(final String qry) {
            ResultSet rs = null;
            try {
                final Statement st = this.con.createStatement();
                rs = st.executeQuery(qry);
            } catch (SQLException e) {
                this.Connect();
                e.printStackTrace();
            }
            return rs;
        }
    }
     
     
  2. It will create problems as you do not run your database queries asynchronously.