Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Помогите запрос в Postgres. Передать параметр массив.

Метки:
Теги Теги
array postgresql sql

NeMaster

Новичок
Пользователь
Баллы
21
У меня при установке параметра типа массив строк не отрабатывает.
на строке System.out.println(statement.toString()) я получаю в консоль
"UPDATE arena SET status='BATTLE' WHERE status = 'WAIT' and player in (?)"
Делал System.out.println(array.toString()) и видно было что это нужный массив.
Не понимаю, что не так.
Код:
    public void setBattleMode(String[] fighters) {
       Array array = null;
       try {
           array = this.connection.createArrayOf("VARCHAR", fighters);
       } catch (SQLException e1) {
           e1.printStackTrace();
       }

       try (PreparedStatement statement = this.connection.prepareStatement(
                "UPDATE arena SET status='BATTLE' WHERE status = 'WAIT' and player in (?)")) {
            statement.setArray(1, array);
            System.out.println(statement.toString());
            statement.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
 
System.out.println(array.toString()) выводит в консоль строку
{"8d60a123-e48a-3532-98d9-6546c187f2a1","538dac41-085c-3fe7-bd7c-157b62aff69c"}
 
Поразительно!
Я сделал костыль в виде ручного запроса и он не отработал, произошла ошибка
Код:
       String q = "'"+String.join("','", fighters)+"'";
        System.out.println("UPDATE arena SET status='BATTLE' WHERE status = 'WAIT' and player in ("+ q +")");
      
        try (PreparedStatement statement = this.connection.prepareStatement(
//                "UPDATE arena SET status='BATTLE' WHERE status = 'WAIT' and player in (?)")) {
                "UPDATE arena SET status='BATTLE' WHERE status = 'WAIT' and player in ("+ q +")")) {
[13:24:27] [Server thread/WARN]: org.postgresql.util.PSQLException: The column index is out of range: 1, number of columns: 0.
[13:24:27] [Server thread/WARN]: at org.postgresql.core.v3.SimpleParameterList.bind(SimpleParameterList.java:69)
[13:24:27] [Server thread/WARN]: at org.postgresql.core.v3.SimpleParameterList.setBinaryParameter(SimpleParameterList.java:136)
[13:24:27] [Server thread/WARN]: at org.postgresql.jdbc.PgPreparedStatement.bindBytes(PgPreparedStatement.java:1047)
[13:24:27] [Server thread/WARN]: at org.postgresql.jdbc.PgPreparedStatement.setArray(PgPreparedStatement.java:1148)
[13:24:27] [Server thread/WARN]: at crypto.db.Db.setBattleMode(Db.java:119)
[13:24:27] [Server thread/WARN]: at crypto.Main.newBattle(Main.java:335)
[13:24:27] [Server thread/WARN]: at crypto.Main.btlPushButton(Main.java:460)
[13:24:27] [Server thread/WARN]: at crypto.Main.onPlayerInteract(Main.java:595)
[13:24:27] [Server thread/WARN]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[13:24:27] [Server thread/WARN]: at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
[13:24:27] [Server thread/WARN]: at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
[13:24:27] [Server thread/WARN]: at java.base/java.lang.reflect.Method.invoke(Method.java:568)
[13:24:27] [Server thread/WARN]: at org.bukkit.plugin.java.JavaPluginLoader$1.execute(JavaPluginLoader.java:306)
[13:24:27] [Server thread/WARN]: at org.bukkit.plugin.RegisteredListener.callEvent(RegisteredListener.java:70)
[13:24:27] [Server thread/WARN]: at org.bukkit.plugin.SimplePluginManager.fireEvent(SimplePluginManager.java:589)
[13:24:27] [Server thread/WARN]: at org.bukkit.plugin.SimplePluginManager.callEvent(SimplePluginManager.java:576)
[13:24:27] [Server thread/WARN]: at org.bukkit.craftbukkit.v1_18_R1.event.CraftEventFactory.callPlayerInteractEvent(CraftEventFactory.java:504)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.level.PlayerInteractManager.a(PlayerInteractManager.java:484)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.network.PlayerConnection.a(PlayerConnection.java:1533)
[13:24:27] [Server thread/WARN]: at net.minecraft.network.protocol.game.PacketPlayInUseItem.a(PacketPlayInUseItem.java:33)
[13:24:27] [Server thread/WARN]: at net.minecraft.network.protocol.game.PacketPlayInUseItem.a(PacketPlayInUseItem.java:1)
[13:24:27] [Server thread/WARN]: at net.minecraft.network.protocol.PlayerConnectionUtils.lambda$0(PlayerConnectionUtils.java:30)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.TickTask.run(SourceFile:18)
[13:24:27] [Server thread/WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.c(SourceFile:151)
[13:24:27] [Server thread/WARN]: at net.minecraft.util.thread.IAsyncTaskHandlerReentrant.c(SourceFile:23)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.b(MinecraftServer.java:1158)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.c(MinecraftServer.java:1)
[13:24:27] [Server thread/WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.y(SourceFile:125)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.bf(MinecraftServer.java:1137)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.y(MinecraftServer.java:1130)
[13:24:27] [Server thread/WARN]: at net.minecraft.util.thread.IAsyncTaskHandler.c(SourceFile:134)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.x(MinecraftServer.java:1114)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:1038)
[13:24:27] [Server thread/WARN]: at net.minecraft.server.MinecraftServer.lambda$0(MinecraftServer.java:304)
[13:24:27] [Server thread/WARN]: at java.base/java.lang.Thread.run(Thread.java:833)
[
 
А, с последним я понял. Забыл убрать statement.setArray
Уже припарился кодить.
 
попробуй запрос следующим образом:
System.out.println(array.toString()) выводит в консоль строку
{"8d60a123-e48a-3532-98d9-6546c187f2a1","538dac41-085c-3fe7-bd7c-157b62aff69c"}
тут наверное из-за того, что кавычки не те, надо ' '
 

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

Назад
Верх