Отображение данных из двух таблиц в Java MySQL

0

Я хочу отображать сообщения с именем отправителя. Внешний цикл while работает нормально, но во внутреннем цикле есть некоторая проблема. Я много пробовал разобраться, но не получил результата. Может кто-нибудь мне помочь? Я очень благодарен.

package db;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.Scanner;

public class Messages extends Login {
    static Scanner in = new Scanner(System.in);

public static void main(String args[]) throws Exception{
    boolean isLoggedin = login();

    String msg = "";
    String senName = "";

    if(isLoggedin) {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo?verifyServerCertificate=false&useSSL=false", "root", "");
        Statement st = con.createStatement();
        Statement st1 = con.createStatement();
        ResultSet rs = st.executeQuery("SELECT * FROM chat");
        ResultSet rs1 = st1.executeQuery("SELECT * FROM data");
        while(rs.next()) {
            int dbRecID = rs.getInt("reciever_id");
            if(dbRecID == user_id) {
                msg = rs.getString("message");
                int dbSenID = rs.getInt("sender_id");
                while(rs1.next()) {
                    int senID = rs1.getInt("id");
                    if(senID == dbSenID) {
                        senName = rs1.getString("name");
                    }
                }
                System.out.println(senName+" sent you a message: "+msg);
            }
        }

    }
    else {
        System.out.print("Login Unsuccessful");
    }
}
}

Выход

Ali Ahmed sent you a message: How are you?
Ali Ahmed sent you a message: Hi!

Требуемый вывод

Ali Ahmed sent you a message: How are you?
Hamza sent you a message: Hi!
Теги:
database
jdbc

1 ответ

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

Проблема происходит от двух вложен в while циклы.

Запрос ResultSet rs1 = st1.executeQuery("SELECT * FROM data"); выполняется только один раз.

При первом while(rs.next()) вы получите весь контент rs1 чтобы проверить, является ли идентификатор отправителя правильным.

Затем на второй итерации while(rs.next()) потому что rs1 уже извлечен, while(rs1.next()) wil возвращает false.

Чтобы заставить ваш код работать, вы должны переместить выполнение второго запроса, чтобы получить что-то вроде этого:

while(rs.next()) {
    ...
    ResultSet rs1 = st1.executeQuery("SELECT * FROM data");
    while(rs1.next()) {
        ...
    }
    ...
}

Но я думаю, что было бы лучшим решением сделать только один запрос SQL, соединяющий данные двух таблиц и включающий условие where.

  • 0
    Привет Nirekin, Большое спасибо за вашу помощь! Этот метод работал для меня. Еще раз спасибо! :)
  • 0
    Хорошо, отлично, но рассмотрим уникальный запрос Sql, используя соединение ...

Ещё вопросы

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