在java mysql中从两个表中删除数据

cgyqldqp  于 5个月前  发布在  Mysql
关注(0)|答案(1)|浏览(73)

我想用发送者的名字显示消息。外部的while循环工作正常,但内部的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!

1tuwyuhd

1tuwyuhd1#

问题来自两个嵌套的while循环。
查询ResultSet rs1 = st1.executeQuery("SELECT * FROM data");只执行一次。
第一次在while(rs.next())上循环时,您将获取rs1的全部内容,以检查发件人ID是否正确。
然后在while(rs.next())的第二次迭代中,因为rs1已经被提取,while(rs1.next())将返回false
为了让你的代码工作,你应该移动第二个查询的执行,以获得类似这样的东西:

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

字符串
但我认为,更好的解决方案是只发出一个SQL请求,连接两个表的数据,并包括where条件。

相关问题