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

cgyqldqp  于 2024-01-05  发布在  Mysql
关注(0)|答案(1)|浏览(177)

我想用发送者的名字显示消息。外部的while循环工作正常,但内部的while循环有一些问题。我已经试了很多方法,但没有结果。有人能帮助我吗?我会非常感谢。

  1. package db;
  2. import java.sql.Connection;
  3. import java.sql.DriverManager;
  4. import java.sql.ResultSet;
  5. import java.sql.Statement;
  6. import java.util.Scanner;
  7. public class Messages extends Login {
  8. static Scanner in = new Scanner(System.in);
  9. public static void main(String args[]) throws Exception{
  10. boolean isLoggedin = login();
  11. String msg = "";
  12. String senName = "";
  13. if(isLoggedin) {
  14. Class.forName("com.mysql.jdbc.Driver");
  15. Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/demo?verifyServerCertificate=false&useSSL=false", "root", "");
  16. Statement st = con.createStatement();
  17. Statement st1 = con.createStatement();
  18. ResultSet rs = st.executeQuery("SELECT * FROM chat");
  19. ResultSet rs1 = st1.executeQuery("SELECT * FROM data");
  20. while(rs.next()) {
  21. int dbRecID = rs.getInt("reciever_id");
  22. if(dbRecID == user_id) {
  23. msg = rs.getString("message");
  24. int dbSenID = rs.getInt("sender_id");
  25. while(rs1.next()) {
  26. int senID = rs1.getInt("id");
  27. if(senID == dbSenID) {
  28. senName = rs1.getString("name");
  29. }
  30. }
  31. System.out.println(senName+" sent you a message: "+msg);
  32. }
  33. }
  34. }
  35. else {
  36. System.out.print("Login Unsuccessful");
  37. }
  38. }
  39. }

字符串

输出

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

所需输出

  1. Ali Ahmed sent you a message: How are you?
  2. 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
为了让你的代码工作,你应该移动第二个查询的执行,以获得类似这样的东西:

  1. while(rs.next()) {
  2. ...
  3. ResultSet rs1 = st1.executeQuery("SELECT * FROM data");
  4. while(rs1.next()) {
  5. ...
  6. }
  7. ...
  8. }

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

展开查看全部

相关问题