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

Помогите Медленная запись в SQLite.

Тема в разделе "Разработка плагинов для новичков", создана пользователем Lisenochek, 21 авг 2018.

Статус темы:
Закрыта.
  1. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Так соединил, а класса не импортируется.
     
  2. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
  3. Exception_Prototype

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

    Баллы:
    96
    А чё так можно было? Не знал.
     
  4. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Было бы можно, если класс у меня был в импорте.
     
  5. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Почему я добавил библиотеку H2 к проекту, а он его типо не видит?
     
  6. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Подключай мавеном, коннект делай через Hikari Pool.
     
  7. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    А по-старинке вообще никак нельзя? В этом джарнике даже этого класса толком нет.
     
  8. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Ну писец… эксперты собрались… Тут надо юзать асинхронный шедулер. Плодить каждый раз новый тред на новый запрос это сразу минус проц. Юзать CompletableFuture#supplyAsync без указывания екзекутора тоже хрень, так как по дефолту там юзается fork join pool - забьете его такими долгими вещами как обработка запросов из базы, то у вас сразу отвалятся вещи которые активно юзают fork join pool(паралельные стримы и тд)
     
  9. alexandrage

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

    Баллы:
    173
    Тебе нужен h2_driver-1.4.196.jar.
     
  10. _Nanit_

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

    Баллы:
    76
    Имя в Minecraft:
    _Nanit_
    Сам в другой теме писал, что можно юзать CompletableFuture для коннекта к бд, теперь сам себе противоречишь -_-. Но сейчас вроде бы по логике все объяснил, спасибо.
     
    Последнее редактирование: 22 авг 2018
  11. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я зашел на их официальный сайт и перекачал все. Нет такого джарника, только тот, который был описан выше. В Maven точно такой же джарник.
     
  12. AbstractCoder

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

    Баллы:
    76
    Имя в Minecraft:
    AbstractCoder
    Ору, ты хотя бы понял, что он написал? Он говорит, что CompletableFuture надо юзать с Executor-ом, а не забивать Fork join pool, где тут противоречие то?
    По-старинке можно только страдать фигней и деградировать.
     
  13. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
     
  14. alexandrage

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

    Баллы:
    173
    Версия может быть уже новее. Не имеет значения.
    http://repo2.maven.org/maven2/com/h2database/h2/1.4.197/h2-1.4.197.jar
     
  15. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    С горем пополам у меня получилось подсоединить базу, но появилась другая проблема: чтение записей происходит быстрее, чем метод executeQuery, т.е при первом запуске по идее создаются таблицы, но в этом случае происходит так, что метод чтения данных вызывается быстрее метода создания таблиц и происходит исключение.
     
  16. alexandrage

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

    Баллы:
    173
    Ну так порядок поменяй. Я обычно сразу в конструкторе делаю.
     
  17. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Сделал я это примерно так (я убрал ассинхронный метод):

    Код:
    package ru.lisenochek.cc.sql;
    
    import ru.lisenochek.cc.Main;
    import ru.lisenochek.cc.utils.Logger;
    
    import java.sql.*;
    
    public class SQL {
    
        public static Connection connection;
        public static Statement statement;
        public static ResultSet resultSet;
    
        public synchronized static void closeConnection() throws SQLException {
            if (connection != null && !connection.isClosed()) connection.close();
        }
    
        public synchronized static void openConnection() throws ClassNotFoundException, SQLException {
            Class.forName("org.h2.Driver");
            connection = DriverManager.getConnection("jdbc:h2:" + Main.plugin.getDataFolder().getAbsolutePath() + "/Database;mode=MySQL", "sa", "");
            statement = connection.createStatement();
        }
    
        public synchronized static void executeQuery(String query) {
    
            if (query == null || query.equals("")) {
                Logger.getLogger("Невозможно выполнить запрос! Он равен null или пуст!").error();
                return;
            }
    
            try {
                statement.execute(query);
                statement.close();
                closeConnection();
                openConnection();
            } catch (SQLException | ClassNotFoundException e) {
                Logger.getLogger("Что-то пошло не так и при запросе появилось исключение:").error();
                Logger.getLogger(e.getMessage()).error();
            }
        }
    }
    
     
  18. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Что это такое? Постоянно после компиляции плагина такое происходит.

    java.util.zip.ZipException: invalid stored block lengths
    [11:14:37] [Server thread/WARN]: at java.util.zip.InflaterInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.io.FilterInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.io.FilterInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.io.PushbackInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.util.zip.ZipInputStream.readFully(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.util.zip.ZipInputStream.readLOC(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
    [11:14:37] [Server thread/WARN]: at org.h2.util.Utils.loadResource(Utils.java:447)
    [11:14:37] [Server thread/WARN]: at org.h2.util.Utils.getResource(Utils.java:427)
    [11:14:37] [Server thread/WARN]: at org.h2.message.DbException.<clinit>(DbException.java:41)
    [11:14:37] [Server thread/WARN]: at org.h2.util.JdbcUtils.loadUserClass(JdbcUtils.java:198)
    [11:14:37] [Server thread/WARN]: at org.h2.value.DataType.<clinit>(DataType.java:176)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Mode.<clinit>(Mode.java:286)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Database.<init>(Database.java:171)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.openSession(Engine.java:66)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.openSession(Engine.java:179)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.createSessionAndValidate(Engine.java:157)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.createSession(Engine.java:140)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.createSession(Engine.java:28)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:351)
    [11:14:37] [Server thread/WARN]: at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
    [11:14:37] [Server thread/WARN]: at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:103)
    [11:14:37] [Server thread/WARN]: at org.h2.Driver.connect(Driver.java:69)
    [11:14:37] [Server thread/WARN]: at java.sql.DriverManager.getConnection(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.sql.DriverManager.getConnection(Unknown Source)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.sql.SQL.openConnection(SQL.java:20)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.sql.SQLManager.initSQL(SQLManager.java:15)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.Boostrapper.initPlugin(Boostrapper.java:35)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.Main.onEnable(Main.java:12)
    [11:14:37] [Server thread/WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264)
    [11:14:37] [Server thread/WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337)
    [11:14:37] [Server thread/WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:403)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:381)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:330)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:752)
    [11:14:37] [Server thread/WARN]: at org.bukkit.Bukkit.reload(Bukkit.java:525)
    [11:14:37] [Server thread/WARN]: at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27)
    [11:14:37] [Server thread/WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:634)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:444)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:407)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577)
    [11:14:37] [Server thread/WARN]: at java.lang.Thread.run(Unknown Source)
    [11:14:37] [Server thread/WARN]: java.util.zip.ZipException: invalid stored block lengths
    [11:14:37] [Server thread/WARN]: at java.util.zip.InflaterInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.io.FilterInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.io.FilterInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.io.PushbackInputStream.read(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.util.zip.ZipInputStream.readFully(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.util.zip.ZipInputStream.readLOC(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.util.zip.ZipInputStream.getNextEntry(Unknown Source)
    [11:14:37] [Server thread/WARN]: at org.h2.util.Utils.loadResource(Utils.java:447)
    [11:14:37] [Server thread/WARN]: at org.h2.util.Utils.getResource(Utils.java:427)
    [11:14:37] [Server thread/WARN]: at org.h2.message.DbException.<clinit>(DbException.java:48)
    [11:14:37] [Server thread/WARN]: at org.h2.util.JdbcUtils.loadUserClass(JdbcUtils.java:198)
    [11:14:37] [Server thread/WARN]: at org.h2.value.DataType.<clinit>(DataType.java:176)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Mode.<clinit>(Mode.java:286)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Database.<init>(Database.java:171)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.openSession(Engine.java:66)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.openSession(Engine.java:179)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.createSessionAndValidate(Engine.java:157)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.createSession(Engine.java:140)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.Engine.createSession(Engine.java:28)
    [11:14:37] [Server thread/WARN]: at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:351)
    [11:14:37] [Server thread/WARN]: at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:124)
    [11:14:37] [Server thread/WARN]: at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:103)
    [11:14:37] [Server thread/WARN]: at org.h2.Driver.connect(Driver.java:69)
    [11:14:37] [Server thread/WARN]: at java.sql.DriverManager.getConnection(Unknown Source)
    [11:14:37] [Server thread/WARN]: at java.sql.DriverManager.getConnection(Unknown Source)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.sql.SQL.openConnection(SQL.java:20)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.sql.SQLManager.initSQL(SQLManager.java:15)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.Boostrapper.initPlugin(Boostrapper.java:35)
    [11:14:37] [Server thread/WARN]: at ru.lisenochek.cc.Main.onEnable(Main.java:12)
    [11:14:37] [Server thread/WARN]: at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:264)
    [11:14:37] [Server thread/WARN]: at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:337)
    [11:14:37] [Server thread/WARN]: at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:403)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugin(CraftServer.java:381)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.enablePlugins(CraftServer.java:330)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.reload(CraftServer.java:752)
    [11:14:37] [Server thread/WARN]: at org.bukkit.Bukkit.reload(Bukkit.java:525)
    [11:14:37] [Server thread/WARN]: at org.bukkit.command.defaults.ReloadCommand.execute(ReloadCommand.java:27)
    [11:14:37] [Server thread/WARN]: at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:141)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchCommand(CraftServer.java:648)
    [11:14:37] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_12_R1.CraftServer.dispatchServerCommand(CraftServer.java:634)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.DedicatedServer.aP(DedicatedServer.java:444)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.DedicatedServer.D(DedicatedServer.java:407)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.C(MinecraftServer.java:679)
    [11:14:37] [Server thread/WARN]: at net.minecraft.server.v1_12_R1.MinecraftServer.run(MinecraftServer.java:577)
    [11:14:37] [Server thread/WARN]: at java.lang.Thread.run(Unknown Source)
     
  19. hyndorik

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

    Баллы:
    98
    Имя в Minecraft:
    hyndo
    Код говно, иди учи основы явы.
    Зачем ты убрал асинхрон?

    Где противоречие? Надо юзать CompletableFuture со своим екзекутором, либо доставать бакитовский еззекутор рефлексией из CraftScheduler, либо создавать своей, первый вариант более приоритетный, так как не плодится большое кол-во ненужных потоков. Либо можно просто создавать объект CompletableFuture, создавать обычный бакит асирхрон шедулер, и сетать значение фьючеру через CompletableFuture#complete
     
  20. Автор темы
    Lisenochek

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

    Баллы:
    76
    Имя в Minecraft:
    Lisenochek
    Я просто промолчу.
     
Статус темы:
Закрыта.

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