【问题标题】:Code for populating a JTable with data from a MS Access database使用 MS Access 数据库中的数据填充 JTable 的代码
【发布时间】:2014-09-23 07:00:54
【问题描述】:

我正在为我的 12 年级 IT 课程做一个实用的评估任务。我正在努力使用代码在我的 GUI 中填充我的 jTable(来自 swing 控件)。我正在使用 Netbeans 作为 IDE。数据库使用 jdbc:odbc 网桥连接。这段代码在我项目的一个 java 类中。

**请注意,我在编码方面相对缺乏经验

这是我目前拥有的代码(但它在我的 jtable 中没有输出) 如果你能解决它,请解释你做了什么,或者如果你可以请给我代码,这将是可行的:)

 db.setConnection();
    Statement stmt = null;

    try {
        con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}"
                + ";DBQ=src/TheChangeProjectDB.accdb");
        stmt = con.createStatement();
    } catch (SQLException ex) {
        JOptionPane.showMessageDialog(null, "Error: " + ex);
    }


    String sql = "SELECT * FROM KanyisaLearners";
    try {

        ResultSet rs = stmt.executeQuery(sql);
        ResultSetMetaData md = rs.getMetaData();
        int columns = md.getColumnCount();
        for (int i = 1; i <= columns; i++) {
            columnNames.addElement(md.getColumnName(i));
        }
        while (rs.next()) {
            Vector row = new Vector(columns);
            for (int i = 0; i <= columns; i++) {
                row.addElement(rs.getObject(i));
            }
            data.addElement(row);
        }
        rs.close();
        stmt.close();
    } catch (Exception e) {
        System.out.println(e);
    }

    JTable table = new JTable(data, columnNames);

    JScrollPane scrollPane = new JScrollPane(table);
    getContentPane().add(scrollPane);

    JPanel buttonPanel = new JPanel();
    getContentPane().add(buttonPanel, BorderLayout.SOUTH);

         KanyisaHoofskerm frame = new KanyisaHoofskerm();
    frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
    frame.pack();
    frame.setTitle("Learners");
    frame.setVisible(true);

【问题讨论】:

  • 您的代码有什么问题?您必须获取表模型并向其中添加数据并将模型设置回表
  • 我真的不知道到底出了什么问题。我自己没有编写代码;我从互联网上获得了这段代码并对其进行了修改。我得到的错误是:“java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid descriptor index”但 Jtable 上根本没有输出

标签: java swing ms-access jdbc jtable


【解决方案1】:

鉴于此行:

JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane); // your class extends from JFrame?

JPanel buttonPanel = new JPanel();
getContentPane().add(buttonPanel, BorderLayout.SOUTH);

然后是这个:

KanyisaHoofskerm frame = new KanyisaHoofskerm(); // new frame local variable
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
...
frame.setVisible(true);

我强烈怀疑您的课程是从您要添加表格的JFrame 扩展而来的。如果是这样,那么您不会使其可见,而是使用新的 frame 局部变量。因此,至少就我所见,根本没有显示表格。

如果是这种情况,请查看this question with the same problemExtends JFrame vs. creating it inside the the program 主题。

关于你的代码做数据库调用:

【讨论】:

  • 感谢 dic19。我会根据您的建议进行更改,希望对您有所帮助,因为我有点不知所措!
【解决方案2】:

您的代码在添加行时出现异常。 通过使用描述符而不是使用索引来更改代码。

 while (rs.next()) {
        Vector row = new Vector(columns);
        for (int i = 0; i < columns; i++) {
            row.addElement(rs.getObject(columnNames.get(i)));
        }
        data.addElement(row);
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-12
    • 2014-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多