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

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

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

Метки:
  1. Автор темы
    NeMaster

    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();
            }
        }
    
    
     
  2. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    Что array выводит?
     
  3. Автор темы
    NeMaster

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

    Баллы:
    21
    System.out.println(array.toString()) выводит в консоль строку
    {"8d60a123-e48a-3532-98d9-6546c187f2a1","538dac41-085c-3fe7-bd7c-157b62aff69c"}
     
  4. Автор темы
    NeMaster

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

    Баллы:
    21
    Поразительно!
    Я сделал костыль в виде ручного запроса и он не отработал, произошла ошибка
    Код:
           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 +")")) {
    
    
     
  5. Автор темы
    NeMaster

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

    Баллы:
    21
    А, с последним я понял. Забыл убрать statement.setArray
    Уже припарился кодить.
     
  6. OJIEKCAHDP

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

    Баллы:
    76
    Имя в Minecraft:
    OJIEKCAHDP
    попробуй запрос следующим образом:
    тут наверное из-за того, что кавычки не те, надо ' '
     

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