1. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

Помогите Java & SQLite

Тема в разделе "Разработка плагинов для новичков", создана пользователем Korvinius, 9 май 2016.

  1. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Шедулер (Scheduler) — блок, выполняющий менеджмент задач (можно писать, например, тасков (Task)) для их выполнения по заданному расписанию.
    Все они (запускаемые через методы runTask*, schedule*Task и т.п.) планируются на определённые ближайшие серверные тики и, естественно, выполняются в основном потоке. В параллельном потоке будут запущены только те, которые ты стартанул через методы со словом Async*. Но это всё лишняя обёртка, поэтому для старта задачи в параллели достаточно сделать свою new Thread(...), а из неё планировать таски в основной цикл через runTask.
     
  2. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
  3. hobabibs

    hobabibs Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    bhtyujnbfyu8
    Нужно держать соединение с SQLite открытым, как и с MySQL, тогда все операции осуществляются быстро.
     
  4. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Если на сервере 0 игроков в течение 12 часов, тоже оставлять открытой?
     
  5. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    хз правильно это или нет, сделал так, чтобы после запуска сервера, через "х" минут запускался второй поток,в котором бесконечный цыкл просыпается каждые 10 минут, обрабатывает имеющиеся данные и записывает их в БД, а так как есть 2 плановые перезагрузки сервера в 8.00 и 17.00, чтобы работа с базой не попала на время перезагрузки, сделал ее на 1 минуту раньше, то есть в 9, 19, 29, 39, 49, 59 минут каждого часа:
    Код:
        @Override
        public void onEnable() {
    
    
    
    
            BukkitScheduler scheduler = Bukkit.getServer().getScheduler();
            scheduler.scheduleSyncDelayedTask(this, new Runnable() {
                @Override
                public void run() {
                    new TimeLevelRun(Mystery.instance);
                    instance.getLogger().info("Обновление рангов запущено!");
                }
            }, getMinToHourNull()*1200);
        }
    
        public int getMinToHourNull() {
            int i = 0;
            Date d = new Date();
            SimpleDateFormat min = new SimpleDateFormat("mm");
            try {
                i = Integer.parseInt(min.format(d).toString());
            } catch (NumberFormatException e) { 
            }
    
            i = 60-(i+1);
            if (i>50)         return i-50;
            if (i<50 && i>40) return i-40;
            if (i<40 && i>30) return i-30;
            if (i<30 && i>20) return i-20;
            if (i<20 && i>10) return i-10;
            if (i<10 && i>5) return i-5;
            return i;
        }
    
    
    
    public class TimeLevelRun implements Runnable {
    
        private Mystery plugin;
        private Thread thread;
    
        public TimeLevelRun(Mystery plg) {
            this.plugin = plg;
            thread = new Thread(this, "Calculate time-level Players: ");
            thread.start();
        }
    
        @Override
        public void run() {
            LevelCalculate calc = new LevelCalculate();
           
            while(true) {
    
                calc.setTimesLevels(plugin);
                plugin.getLogger().info("Ранги обновлены!");
    
                try {
                    Thread.sleep(600000);
                } catch (InterruptedException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
    
            }
        }
    }
     
  6. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Это же просто файл, нет ничего плохого в том, что программа, работающая часами, держит файл, с которым она может обмениваться информацией, открытым.
    Можно ведь блокировать onDisable до тех пор, пока все данные не запишутся в БД. Даже если это параллельный поток, просто стоишь на ожидании его завершения и всё. Поэтому вся кухня с минутами костыль, имхо.

    Из альтернатив: пусть параллельный поток всегда пишет в БД, как только появляются новые данные. Тогда БД будет всегда почти сразу в актуальном состоянии. Сочетается с предыдущим абзацем.
     
  7. hobabibs

    hobabibs Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    bhtyujnbfyu8
    Разумеется. База локальная, как в случае с MySQL трафик не будет регулярно ходить туда-сюда, чтобы соединение не пало по таймауту.
    Держи всегда открытым, это нормально.
     
  8. Dereku

    Dereku Старожил Пользователь

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Возможно я имел в виду что используются ресурсы для этого, что немного фу. Хотя, я уже не помню, что хотел сказать этим :с
     
  9. hobabibs

    hobabibs Новичок Пользователь

    Баллы:
    16
    Имя в Minecraft:
    bhtyujnbfyu8
    21 век же, не надо быть мелочным. SQLite база данных - это не просто файл, это база данных. Там все продумано и все содержимое не хранится в памяти сервера.
     
  10. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    ну, изначально, я этот "костыль" лепил, для того, чтобы все нужные работы проводились по фиксированному времени, то есть не в 17.03 или 14.04, а 17.00, 14.00, 14.10 и т.д., чтобы знать точное время пересчета, но потом просто решил еще и отминусовать 1 минуту, дабы не пересекалось с рестартами...
     
  11. Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Ну, если работает и нет причин переписывать как-то лучше, конечно, ОКъ.
     
  12. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    я не говорю что нет причин делать лучше) просто объяснил зачем этот костыль делал, а для улучшения кода и причин искать не нужно...
     
  13. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    Вай сколько костылей велосипедов. PreparedStatement не не слышали, от sql inj?
    Ты сломал мои глаза...

    1. i = 60-(i+1);
    2. if (i>50) return i-50;
    3. if (i<50 && i>40) return i-40;
    4. if (i<40 && i>30) return i-30;
    5. if (i<30 && i>20) return i-20;
    6. if (i<20 && i>10) return i-10;
    7. if (i<10 && i>5) return i-5;
    8. return i;
    9. К чему такая лесенка?
     
  14. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    хз, я же не профи, а любитель :) как сумел, так и придумал, есть вариант лучше? Я всегда благодарен за советы...
     
  15. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    Насколько я знаю - это считается плохим тоном, поэтому закрываю соединение после каждой операции.
     
  16. Larin

    Larin Старожил Пользователь

    Баллы:
    103
    Создаём пул из 2-3 соединений и уже можно закрывать со спокойной душой, пул сам откроет соединение, если понадобится.
     
  17. alexandrage

    alexandrage Старожил Пользователь

    Баллы:
    173
    На SQLite нет смысла закрывать, там же не общая база для овер900 плагинов и тп.
     
  18. CraftCoder

    CraftCoder Старожил Пользователь

    Баллы:
    108
    Имя в Minecraft:
    CraftCoderr
    На sqlite да.
     
  19. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Здравствуйте, решил я обновить свой плагин с версии 1.8.8 до 1.12.2 подключил SpigotAPI 1.12.2 и в результате, с ранее работающего плагина получаю такой вот результат:
    Код:
    java.sql.SQLException: Values not bound to statement
    <------>at org.sqlite.core.CorePreparedStatement.checkParameters(CorePreparedStatement.java:64) ~[middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.sqlite.jdbc3.JDBC3PreparedStatement.executeQuery(JDBC3PreparedStatement.java:73) ~[middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.wealth_mc.mystery.db.Database.initialize(Database.java:41) [Mystery.jar:?]
    <------>at net.wealth_mc.mystery.db.SQLite.load(SQLite.java:98) [Mystery.jar:?]
    <------>at net.wealth_mc.mystery.Mystery.onEnable(Mystery.java:88) [Mystery.jar:?]
    <------>at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:403) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:382) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:331) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:422) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:383) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:338) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:272) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:545) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
    

    Код:
    package net.wealth_mc.mystery.db;
    
    import java.io.File;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.logging.Level;
    
    import net.wealth_mc.mystery.Mystery;
    
    public class SQLite extends Database{
    
        private String dbname;
    
        public SQLite(Mystery instance){
            super(instance);
            dbname =  "Mystery";
        }
                
        public Connection getSQLConnection() {
            File dataFolder = new File(plugin.getDataFolder(), dbname+".db");
            if (!dataFolder.exists()){
                try {
                    dataFolder.createNewFile();
                } catch (IOException e) {
                    plugin.getLogger().log(Level.SEVERE, "File write error: "+dbname+".db");
                }
            }
            try {
                if(connection!=null && !connection.isClosed()){
                    return connection;
                }
                Class.forName("org.sqlite.JDBC");
                connection = DriverManager.getConnection("jdbc:sqlite:" + dataFolder);
                return connection;
            } catch (SQLException ex) {
                plugin.getLogger().log(Level.SEVERE,"SQLite exception on initialize", ex);
            } catch (ClassNotFoundException ex) {
                plugin.getLogger().log(Level.SEVERE, "You need the SQLite JBDC library. Google it. Put it in /lib folder.");
            }
            return null;
        }
     
        public void load() {
            connection = getSQLConnection();     
            try {
                Statement s = connection.createStatement();
                s.executeUpdate("CREATE TABLE IF NOT EXISTS mystery_player_list ("
    /* 1*/                + "`uniqueId` TEXT varchar(255) NOT NULL UNIQUE, "
    /* 2*/                + "`displayName` TEXT varchar(100) NOT NULL UNIQUE, "
    /* 3*/                + "`legacy` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /* 4*/                + "`legacy_info` TEXT varchar(255), "
    /* 5*/                + "`legacy1` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /* 6*/                + "`legacy_info1` TEXT varchar(255), "
    /* 7*/                + "`legacy2` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /* 8*/                + "`legacy_info2` TEXT varchar(255), "
    /* 9*/                + "`legacy3` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /*10*/                + "`legacy_info3` TEXT varchar(255), "
    /*11*/                + "`legacy4` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /*12*/                + "`legacy_info4` TEXT varchar(255), "
    /*13*/                + "`gender` TEXT varchar(50) NOT NULL DEFAULT 'ASEX', "
    /*14*/                + "`level` INTEGER, "
    /*15*/                + "`timeLevel` INTEGER, "
    /*16*/                + "`gamehours` INTEGER, "
    /*17*/                + "`killLevel` INTEGER, "
    /*18*/                + "`killTheirLegacy` INTEGER, "
    /*19*/                + "`killAlienLegacy` INTEGER, "
    /*20*/                + "`killNotLegacy` INTEGER, "
    /*21*/                + "`IPadress` TEXT varchar(15) NOT NULL, "
    /*22*/                + "`nomult` INTEGER, "
    /*23*/                + "`register` INTEGER, "
    /*24*/                + "`online` INTEGER,"
    /*25*/                + "`grp` TEXT,"
    /*26*/                + "`family` TEXT varchar(100),"
    /*27*/                + "`bal0` TEXT,"
    /*28*/                + "`bal1` TEXT,"
    /*39*/                + "`bal2` TEXT,"
    /*30*/                + "`bal3` TEXT,"
    /*31*/                + "`bal4` TEXT,"
    /*32*/                + "`bal5` TEXT,"
    /*33*/                + "`bal6` TEXT,"
    /*34*/                + "`bal7` TEXT,"
    /*35*/                + "`bal8` TEXT, PRIMARY KEY (`uniqueId`));");
                s.executeUpdate("CREATE TABLE IF NOT EXISTS three_legacy ("
    /* 1*/                + "`legacy` TEXT varchar(255) NOT NULL UNIQUE,"
    /* 2*/                + "`lord_uniqueId` TEXT varchar(255) NOT NULL UNIQUE,"
    /* 3*/                + "`legacyLevel` INTEGER,"
    /* 4*/                + "`legacyInteger` INTEGER,"
    /* 5*/                + "`legacyInfo`, PRIMARY KEY (`legacy`));");
    
                s.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            initialize(); // ***************Это строка № 98*************
        }
    
    }

    Код:
    package net.wealth_mc.mystery.db;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.UUID;
    import java.util.logging.Level;
    import java.util.regex.Pattern;
    
    import net.wealth_mc.mystery.Mystery;
    import net.wealth_mc.mystery.family.HomeLoc;
    
    public abstract class Database {
    
        protected Mystery plugin;
        protected Connection connection;
        public String three_legacy;
        public String mystery_player_list;
    
        public Database(Mystery instance){
            this.plugin = instance;
            this.three_legacy = "three_legacy";
            this.mystery_player_list = "mystery_player_list";
        }
    
        public abstract Connection getSQLConnection();
    
        public abstract void load();
    
        /**
         * Инициализация БД
         */
        public void initialize(){
            connection = getSQLConnection();
            try{
                PreparedStatement ps = connection.prepareStatement("SELECT * FROM " + mystery_player_list + " WHERE uniqueId = ?");
                ResultSet rs = ps.executeQuery(); //**********Это строка № 41************
                close(ps,rs);
            
            } catch (SQLException ex) {                                                                                                                                                                                                                                                                                                                                                                     
                plugin.getLogger().log(Level.SEVERE, "Unable to retreive connection", ex);
            }
        }
    
        /**
         * Закрыть подключение к БД
         * @param ps
         * @param rs
         */
        public void close(PreparedStatement ps,ResultSet rs){
            try {
                if (ps != null)
                    ps.close();
                if (rs != null)
                    rs.close();
            } catch (SQLException ex) {
                Error.close(plugin, ex);
            }
        }
        /**
         * Получить double из String
         * @param bal
         * @return
         */
        public double getBalToStrins(String bal) {
            double balance = Double.parseDouble(bal);
            return balance;
        }
        /**
         * Получить List<UUID> из String
         * @param str
         * @return
         */
        public List<UUID> stringKindToList(String str) {
            List<UUID> uulist = new ArrayList<>();
            String newstr = str.replace("[", "").replace("]", "");
            List<String> list = new ArrayList<String>(Arrays.asList(newstr.split(", ")));
            for (int i = 0; i < list.size(); i++) {
                uulist.add(UUID.fromString(list.get(i)));
            }
            return uulist;
        }
    
        /**
         *
         * @param get HomeLoc to String
         * @return
         */
    
        public HomeLoc getHomeLoc(String str) {
            Pattern pattern = Pattern.compile(" ");
            String[] locitem = pattern.split(str);
            HomeLoc loc = new HomeLoc(
                    Mystery.getInstance().getServer().getWorld(locitem[1]),
                    getIntToString(locitem[2]),
                    getIntToString(locitem[3]),
                    getIntToString(locitem[4]));
            return loc;
        }
    
    
        /**
         *
         * @param get int to String
         * @return
         */
        private int getIntToString(String str) {
            int i = 0;
            
            try {
                i = Integer.parseInt(str);
            } catch (NumberFormatException e) {
            }
            
            return i;
        }
    }

    Не подскажете где мне что нужно копать?
     
  20. Автор темы
    Korvinius

    Korvinius Активный участник Пользователь

    Баллы:
    88
    Здравствуйте, решил я обновить свой плагин с версии 1.8.8 до 1.12.2 подключил SpigotAPI 1.12.2 и в результате, с ранее работающего плагина получаю такой вот результат:
    Код:
    java.sql.SQLException: Values not bound to statement
    <------>at org.sqlite.core.CorePreparedStatement.checkParameters(CorePreparedStatement.java:64) ~[middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.sqlite.jdbc3.JDBC3PreparedStatement.executeQuery(JDBC3PreparedStatement.java:73) ~[middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.wealth_mc.mystery.db.Database.initialize(Database.java:41) [Mystery.jar:?]
    <------>at net.wealth_mc.mystery.db.SQLite.load(SQLite.java:98) [Mystery.jar:?]
    <------>at net.wealth_mc.mystery.Mystery.onEnable(Mystery.java:88) [Mystery.jar:?]
    <------>at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:403) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:382) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:331) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.t(MinecraftServer.java:422) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.l(MinecraftServer.java:383) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.a(MinecraftServer.java:338) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.DedicatedServer.init(DedicatedServer.java:272) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:545) [middle112.jar:git-Spigot-549c1fa-45c8386]
    <------>at java.lang.Thread.run(Thread.java:748) [?:1.8.0_151]
    

    Код:
    package net.wealth_mc.mystery.db;
    
    import java.io.File;
    import java.io.IOException;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    import java.sql.Statement;
    import java.util.logging.Level;
    
    import net.wealth_mc.mystery.Mystery;
    
    public class SQLite extends Database{
    
        private String dbname;
    
        public SQLite(Mystery instance){
            super(instance);
            dbname =  "Mystery";
        }
               
        public Connection getSQLConnection() {
            File dataFolder = new File(plugin.getDataFolder(), dbname+".db");
            if (!dataFolder.exists()){
                try {
                    dataFolder.createNewFile();
                } catch (IOException e) {
                    plugin.getLogger().log(Level.SEVERE, "File write error: "+dbname+".db");
                }
            }
            try {
                if(connection!=null && !connection.isClosed()){
                    return connection;
                }
                Class.forName("org.sqlite.JDBC");
                connection = DriverManager.getConnection("jdbc:sqlite:" + dataFolder);
                return connection;
            } catch (SQLException ex) {
                plugin.getLogger().log(Level.SEVERE,"SQLite exception on initialize", ex);
            } catch (ClassNotFoundException ex) {
                plugin.getLogger().log(Level.SEVERE, "You need the SQLite JBDC library. Google it. Put it in /lib folder.");
            }
            return null;
        }
     
        public void load() {
            connection = getSQLConnection();    
            try {
                Statement s = connection.createStatement();
                s.executeUpdate("CREATE TABLE IF NOT EXISTS mystery_player_list ("
    /* 1*/                + "`uniqueId` TEXT varchar(255) NOT NULL UNIQUE, "
    /* 2*/                + "`displayName` TEXT varchar(100) NOT NULL UNIQUE, "
    /* 3*/                + "`legacy` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /* 4*/                + "`legacy_info` TEXT varchar(255), "
    /* 5*/                + "`legacy1` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /* 6*/                + "`legacy_info1` TEXT varchar(255), "
    /* 7*/                + "`legacy2` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /* 8*/                + "`legacy_info2` TEXT varchar(255), "
    /* 9*/                + "`legacy3` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /*10*/                + "`legacy_info3` TEXT varchar(255), "
    /*11*/                + "`legacy4` TEXT varchar(50) NOT NULL DEFAULT 'VAGUE', "
    /*12*/                + "`legacy_info4` TEXT varchar(255), "
    /*13*/                + "`gender` TEXT varchar(50) NOT NULL DEFAULT 'ASEX', "
    /*14*/                + "`level` INTEGER, "
    /*15*/                + "`timeLevel` INTEGER, "
    /*16*/                + "`gamehours` INTEGER, "
    /*17*/                + "`killLevel` INTEGER, "
    /*18*/                + "`killTheirLegacy` INTEGER, "
    /*19*/                + "`killAlienLegacy` INTEGER, "
    /*20*/                + "`killNotLegacy` INTEGER, "
    /*21*/                + "`IPadress` TEXT varchar(15) NOT NULL, "
    /*22*/                + "`nomult` INTEGER, "
    /*23*/                + "`register` INTEGER, "
    /*24*/                + "`online` INTEGER,"
    /*25*/                + "`grp` TEXT,"
    /*26*/                + "`family` TEXT varchar(100),"
    /*27*/                + "`bal0` TEXT,"
    /*28*/                + "`bal1` TEXT,"
    /*39*/                + "`bal2` TEXT,"
    /*30*/                + "`bal3` TEXT,"
    /*31*/                + "`bal4` TEXT,"
    /*32*/                + "`bal5` TEXT,"
    /*33*/                + "`bal6` TEXT,"
    /*34*/                + "`bal7` TEXT,"
    /*35*/                + "`bal8` TEXT, PRIMARY KEY (`uniqueId`));");
                s.executeUpdate("CREATE TABLE IF NOT EXISTS three_legacy ("
    /* 1*/                + "`legacy` TEXT varchar(255) NOT NULL UNIQUE,"
    /* 2*/                + "`lord_uniqueId` TEXT varchar(255) NOT NULL UNIQUE,"
    /* 3*/                + "`legacyLevel` INTEGER,"
    /* 4*/                + "`legacyInteger` INTEGER,"
    /* 5*/                + "`legacyInfo`, PRIMARY KEY (`legacy`));");
    
                s.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
            initialize(); // ***************Это строка № 98*************
        }
    
    }

    Код:
    package net.wealth_mc.mystery.db;
    
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    import java.util.UUID;
    import java.util.logging.Level;
    import java.util.regex.Pattern;
    
    import net.wealth_mc.mystery.Mystery;
    import net.wealth_mc.mystery.family.HomeLoc;
    
    public abstract class Database {
    
        protected Mystery plugin;
        protected Connection connection;
        public String three_legacy;
        public String mystery_player_list;
    
        public Database(Mystery instance){
            this.plugin = instance;
            this.three_legacy = "three_legacy";
            this.mystery_player_list = "mystery_player_list";
        }
    
        public abstract Connection getSQLConnection();
    
        public abstract void load();
    
        /**
         * Инициализация БД
         */
        public void initialize(){
            connection = getSQLConnection();
            try{
                PreparedStatement ps = connection.prepareStatement("SELECT * FROM " + mystery_player_list + " WHERE uniqueId = ?");
                ResultSet rs = ps.executeQuery(); //**********Это строка № 41************
                close(ps,rs);
           
            } catch (SQLException ex) {                                                                                                                                                                                                                                                                                                                                                                    
                plugin.getLogger().log(Level.SEVERE, "Unable to retreive connection", ex);
            }
        }
    
        /**
         * Закрыть подключение к БД
         * @param ps
         * @param rs
         */
        public void close(PreparedStatement ps,ResultSet rs){
            try {
                if (ps != null)
                    ps.close();
                if (rs != null)
                    rs.close();
            } catch (SQLException ex) {
                Error.close(plugin, ex);
            }
        }
        /**
         * Получить double из String
         * @param bal
         * @return
         */
        public double getBalToStrins(String bal) {
            double balance = Double.parseDouble(bal);
            return balance;
        }
        /**
         * Получить List<UUID> из String
         * @param str
         * @return
         */
        public List<UUID> stringKindToList(String str) {
            List<UUID> uulist = new ArrayList<>();
            String newstr = str.replace("[", "").replace("]", "");
            List<String> list = new ArrayList<String>(Arrays.asList(newstr.split(", ")));
            for (int i = 0; i < list.size(); i++) {
                uulist.add(UUID.fromString(list.get(i)));
            }
            return uulist;
        }
    
        /**
         *
         * @param get HomeLoc to String
         * @return
         */
    
        public HomeLoc getHomeLoc(String str) {
            Pattern pattern = Pattern.compile(" ");
            String[] locitem = pattern.split(str);
            HomeLoc loc = new HomeLoc(
                    Mystery.getInstance().getServer().getWorld(locitem[1]),
                    getIntToString(locitem[2]),
                    getIntToString(locitem[3]),
                    getIntToString(locitem[4]));
            return loc;
        }
    
    
        /**
         *
         * @param get int to String
         * @return
         */
        private int getIntToString(String str) {
            int i = 0;
           
            try {
                i = Integer.parseInt(str);
            } catch (NumberFormatException e) {
            }
           
            return i;
        }
    }

    Не подскажете где мне что нужно копать?
     

Поделиться этой страницей