Почему цикл While срабатывает 2 раза?
Почему при выводе цикл While в Java срабатывает 2 раза? Нужен в итоге одинарный вывод. В таблице по одному значению Джон - кепка красная, Джон - кепка синяя. Почему тут повторяет?
При попытке break; - остается только "кепка красная" , при выводе println за фигурную скобку - "кепка синяя"...
sql = "SELECT * FROM `orders`";
Statement statement = getDbConnection().createStatement();
ResultSet result = statement.executeQuery(sql);
System.out.println("Все заказы\n");
// Далее выводим их, плюс получаем соответствующие записи из других таблиц
while(result.next()) {
// Получаем имя пользователя
sql = "SELECT `login` FROM `users` WHERE `id` = '1' LIMIT 1";
PreparedStatement prUsers1 = getDbConnection().prepareStatement(sql);
ResultSet resUsers1 = prUsers1.executeQuery();
String user_id2 = null;
while (resUsers1.next()) {
user_id2 = resUsers1.getString("login");
}
sql = "SELECT `title` FROM `items` WHERE `category` = ? " ;
PreparedStatement prTovar1 = getDbConnection().prepareStatement(sql);
prTovar1.setString(1, "hats");
ResultSet resTovar1 = prTovar1.executeQuery();
String item_id2 = null;
while (resTovar1.next()) {
item_id2 = resTovar1.getString("title");
System.out.println(user_id2 + " - " + item_id2);
}
}
Ответы (1 шт):
Основная проблема в том, что результаты запроса к таблице orders никак не используются внутри внешнего цикла.
Вероятно, код следует переписать следующим образом:
- Если
idпользователя известен (1), прочитать и запомнить имя пользователяloginдля данного идентификатора отдельно 1 раз. - Прочитать заказы для данного пользователя:
SELECT * FROM `orders` WHERE user_id = ?<- 1 - Для каждого заказа, вычитать соответствующий товар с учётом текущего значения
item_id:SELECT * FROM `items` WHERE id = ?<- item_id -- тогда фактически фильтр по категориям будет не нужен. - Вывод результатов будет - для известного имени пользователя вывести текущее название товара.
Опять-таки, такой способ НЕ рекомендуется, так как он имитирует объединение данных из нескольких таблиц на стороне Java-кода вместо отправления одного корректного запроса с JOIN'ами.
Код не прилагаю в педагогических целях.