Выберите несколько значений столбца с помощью Java ResultSet

0

Я пытаюсь выбрать значения из строки в моей таблице MySQL.

SELECT fortnite,psn,steam,twitch,xbox,youtube 
  FROM 'social_media' 
  WHERE id = '16483378715464928'

Когда я пытаюсь преобразовать результат в строку, ResultSet получает только первую строку "fortnite". Мой вопрос: как получить следующие столбцы и поместить их в одну строку для возврата.

Вот мой пример кода:

    public static String getSocialMedia(String id) {
    String ret = "";
    int i = 1;
    try {
        Statement stmt = null;
        ResultSet resultSet = null;
        getConnection();
        stmt = con.createStatement();
        resultSet = stmt.executeQuery("SELECT fortnite,psn,steam,twitch,xbox,youtube FROM 'social_media' WHERE id ='" + id + "'");
        while(resultSet.next()) {
            ret += resultSet.getString(i) + " ";
            i++;
        }
        if(resultSet != null) {
            resultSet.close();
        }
        if(stmt != null) {
            stmt.close();
        }
    } catch (Exception e) {
        e.printStackTrace();
    }
    return ret;
}
Теги:

2 ответа

3
Лучший ответ

Это происходит из-за этого.

 while(resultSet.next()) {
        ret += resultSet.getString(i) + " ";
        i++; 
   }

В приведенном выше коде внутри, в то время как tiy нужно получить все значения либо по имени, либо по индексу. Функция next() дает вам полную строку, не содержащую ни одного столбца.

Вы должны изменить его на:

while(resultSet.next()) {
    for(i = 1, i <=6, i++){           
        ret += resultSet.getString(i) + " ";
      } 
   }
  • 0
    Да, это работает, я не осознавал, что ResultSet возвращает полную строку, а не отдельные запросы. Вот почему я увеличивал метод getString (), который работал не так, как планировалось. Спасибо за помощь!
2

Когда я пытаюсь преобразовать результат в строку, ResultSet получает только первую строку "fortnite". Мой вопрос: как получить следующие столбцы и поместить их в одну строку для возврата.

Терминология здесь важна, поскольку терминология недоразумений может привести к неправильной интерпретации документации. В этом случае важным терминологическим отличием является "строка" и "столбец".

Ваш запрос SELECTs fortnite,psn,steam,twitch,xbox,youtube. Эти шесть идентификаторов определяют шесть столбцов, которые будут иметь каждая строка в вашем результирующем наборе. Похоже, что ваш конкретный запрос выбирает по основному ключу таблицы, поэтому у вас будет только один или несколько строк, но другие запросы могут возвращать несколько строк.

Вы хотите извлечь значения всех шести столбцов одной строки, но вы while(resultSet.next()), а ResultSet.next() перемещает результирующий набор в следующую строку, если таковой имеется, а не в следующий столбец. Поскольку у вас есть только одна строка, цикл заканчивается только после одной итерации.

Похоже, вы хотите что-то большее:

        if (resultSet.next()) {
            for (i = 1; i <= 6; i++) {
                ret += resultSet.getString(i) + " ";
            }
        }

Значение if (resultSet.next()) необходимо, чтобы переместить результирующий набор в первую строку и определить, когда его нет. Затем вы перебираете столбцы результата, номер которого вы знаете статически, основываясь на запросе.

  • 0
    Спасибо за ваш ответ. Ваш ответ проясняет все мои текущие вопросы о рядах против столбцов. Я был смущен тем, как ResultSet работает. Я только начинаю с Java и SQL. еще раз спасибо

Ещё вопросы

Сообщество Overcoder
Наверх
Меню