【问题标题】:Fill a Swing table with some data from MySQL DB用 MySQL DB 中的一些数据填充 Swing 表
【发布时间】:2013-06-19 11:55:17
【问题描述】:

我需要用 MySQL DB 中的一些数据填充 Swing 表。问题是该表没有显示所有列(即a.aircraftTypeb.aircraftCategory)。在调试模式下,我检查了查询是否返回了正确的数据。那么,为什么最后有些列没有显示呢?

    private JTable tbArrivals;
    private QueryTableModelFS mdArrivals;


    mdArrivals = new QueryTableModelFS();       
    tbArrivals = new JTable(mdArrivals);

    private void fillArrivals() {
            mdArrivals.setHost(url); mdArrivals.setDB(db); mdArrivals.setLogin(login); mdArrivals.setPassw(passw);

            String query;

            query = "SELECT a.id,a.flightNum_arr,a.from_ICAO,a.ETA,a.pkId,a.aircraftType,b.aircraftCategory " +
                    "FROM flightschedule a, aircrafts b " +
                    "WHERE a.aircraftType = b.aircraftType;";
            mdArrivals.setQuery(query);
    }


  public void setQuery(String query) {
    cache = new Vector();
    try {
      // Execute the query and store the result set and its metadata
      Connection con = getConnection();
      Statement statement = con.createStatement();
      ResultSet rs = statement.executeQuery(query);
      ResultSetMetaData meta = rs.getMetaData();
      colCount = meta.getColumnCount();
      // Rebuild the headers array with the new column names
      headers = new String[colCount];
      for (int h = 1; h <= colCount; h++) {
        headers[h - 1] = meta.getColumnName(h);
      }
      while (rs.next()) {
        String[] record = new String[colCount];
        for (int i = 0; i < colCount; i++) {
          record[i] = rs.getString(i + 1);
        }
        cache.addElement(record);
      }
      fireTableChanged(null);         
      rs.close();
      if (con.getAutoCommit() != false) {
        con.close();
      }         
    } catch (Exception e) {
      cache = new Vector();
      e.printStackTrace();
    }
  }

【问题讨论】:

  • 如需尽快获得更好的帮助,请发帖SSCCE
  • 我会推荐使用ResultSetTableModel,它会为你解决所有的麻烦。
  • 您确定将表格和表格标题都添加到容器中(或使用了滚动窗格)。请参阅JTable 教程中的Adding a table to a container

标签: java mysql swing jtable jtableheader


【解决方案1】:

我不知道您的 TableModel 是如何工作的(看起来您可能正在使用 DefaultTableModel),但我建议使用 Vectors 而不是 Arrays 从您的 ResultSet 中获取数据。现在你的代码很混乱。在一个循环中,您使用 (i - 1) 来访问数据。在下一个循环中,您将使用 (i + 1)。我知道原因是因为数组是基于 0 的,而 ResultSet 是基于 1 的。

当您使用 Vector 时,您的循环可以从 1 开始,然后您只需使用 addElement() 方法将数据添加到 Vector,这样您的代码就不会关心匹配索引。

Table From Database 中查看Table From Database Example

【讨论】:

    猜你喜欢
    • 2013-04-04
    • 2012-02-15
    • 1970-01-01
    • 2018-04-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    • 1970-01-01
    相关资源
    最近更新 更多