You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过自连接将同一数据库列数据展示到JTable两列?

问题分析与解决方案

我帮你排查出了代码里的几个关键问题,调整后就能正常把自连接的数据展示到JTable的两列中了:

1. SQL语句的语法错误

你的SQL字符串拼接后存在语法问题:SELECT a.nrzbor , b.nrzbor" + "FROM Zboruri a,Zboruri b 这段代码拼接后,b.nrzbor和FROM之间没有空格,会变成nrzborFROM,数据库根本无法解析这条SQL。

2. 循环内重复设置TableModel

你在while循环里每次添加行都调用jTable5.setModel(model),这完全没必要,而且会导致JTable重复刷新,影响性能。应该在所有数据行都添加到模型后,再一次性设置给JTable。

3. 资源泄漏问题

原代码没有关闭数据库连接、PreparedStatement和ResultSet,这会导致数据库资源泄漏,建议使用try-with-resources语法自动管理这些资源(Java 7及以上版本支持)。


修正后的完整代码

String de_la = introducereOras1.getText(); 
String la = introducereOras2.getText(); 
DefaultTableModel model = new DefaultTableModel(new String[]{"nrzbor1", "nrzbor2"}, 0); 
String url = "jdbc:mysql://localhost:3306/aeroport"; 
String user = "root"; 
String password = ""; 

// 使用try-with-resources自动管理资源,无需手动关闭
try (Connection myConn = DriverManager.getConnection(url, user, password);
     PreparedStatement myStmt = myConn.prepareStatement(
         "SELECT a.nrzbor, b.nrzbor FROM Zboruri a, Zboruri b " +
         "WHERE (a.de_la = ? AND b.de_la = ?) AND (a.la = ? AND b.la = ?)")) {
    
    myStmt.setString(1, de_la); 
    myStmt.setString(2, la); 
    myStmt.setString(3, la); 
    myStmt.setString(4, de_la); 
    
    try (ResultSet rs = myStmt.executeQuery()) {
        while (rs.next()) { 
            String d = rs.getString("a.nrzbor"); 
            String e = rs.getString("b.nrzbor"); 
            model.addRow(new Object[]{d, e}); 
        }
        // 所有行添加完成后,一次性设置模型
        jTable5.setModel(model); 
    }
} catch(Exception e){ 
    System.err.println("Got an exception!"); 
    System.err.println(e.getMessage()); 
    e.printStackTrace(); // 建议打印完整堆栈信息,方便排查问题
}

额外提示

  • 测试时确保introducereOras1和introducereOras2输入的内容在数据库Zboruri表的de_la和la列中存在,避免查询结果为空。
  • 如果你的SQL逻辑是要查询“从A到B”和“从B到A”的航班对,当前的WHERE条件是正确的,但可以考虑用JOIN语法替代旧的逗号分隔表写法,可读性更强:
    SELECT a.nrzbor, b.nrzbor 
    FROM Zboruri a
    JOIN Zboruri b 
      ON a.de_la = ? AND b.de_la = ? 
      AND a.la = ? AND b.la = ?
    

内容的提问来源于stack exchange,提问作者Andrei Jitaru

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:16:27