Я пытаюсь выбрать значения из строки в моей таблице 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;
}
Это происходит из-за этого.
while(resultSet.next()) {
ret += resultSet.getString(i) + " ";
i++;
}
В приведенном выше коде внутри, в то время как tiy нужно получить все значения либо по имени, либо по индексу. Функция next() дает вам полную строку, не содержащую ни одного столбца.
Вы должны изменить его на:
while(resultSet.next()) {
for(i = 1, i <=6, i++){
ret += resultSet.getString(i) + " ";
}
}
Когда я пытаюсь преобразовать результат в строку, 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())
необходимо, чтобы переместить результирующий набор в первую строку и определить, когда его нет. Затем вы перебираете столбцы результата, номер которого вы знаете статически, основываясь на запросе.