【问题标题】:JTable doesn't show the newly inserted row/dataJTable 不显示新插入的行/数据
【发布时间】:2012-01-07 12:32:12
【问题描述】:

我有一个 JTable,我按如下方式填充表格:

jTable_Std_info.setModel(DBControler.getALLStudents());

下面是一个名为 DBControler 的类中的静态方法,它从数据库 (Oracle) 中检索所有数据。

public static DefaultTableModel getALLStudents() throws SQLException, Exception {

    DefaultTableModel tableModel = new DefaultTableModel();
    Vector rows = new Vector();
    Vector columns = new Vector();

    try {
        conn = geConnection();
        cst = conn.prepareCall("{? = call std_getInfoFunc}");
        cst.registerOutParameter(1, oracle.jdbc.OracleTypes.CURSOR);
        cst.execute();
        res = (ResultSet) cst.getObject(1);
        System.out.print(res);
        ResultSetMetaData rsm = res.getMetaData();

        for (int i = 1; i <= rsm.getColumnCount(); i++) {
            columns.addElement(rsm.getColumnName(i));
        }

        int row = 0;
        while (res.next()) {
            Vector vRow = new Vector(); //to store the current row
            //System.out.println("Row " +row+"\n");
            for (int i = 1; i <= rsm.getColumnCount(); i++) {
                String columnValue = res.getString(i);
                vRow.addElement(columnValue);
            }
            row += 1;
            rows.addElement(vRow);
        }
        tableModel.setDataVector(rows, columns);

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        res.close();
        conn.close();
    }
    return tableModel;
}

到目前为止一切正常,但问题是如果我在数据库中插入一条新记录,JTable 不会获取新插入的行/数据。为什么会这样?我该如何解决这个问题?

更新: 当我提交我的新插入时,它正在检索数据。那么每次更新时我都必须提交吗?或者有没有其他方法可以做到这一点?

【问题讨论】:

  • 根据您的实现,每次在数据库中添加一行时,您都需要创建一个新的表模型。在数据库中添加一行后,您是否再次调用getALLStudents()
  • 我是Java初学者,所以对Java的函数了解不多。有没有其他方法可以只更新行而不是创建新的表模型?

标签: java oracle swing jdbc jtable


【解决方案1】:

我认为您正在寻找 Oracle Built-In Database Change Notification,不确定 Oracle 是否可以在免费版本中访问,如果不是那么没关系,对于 MySQL 是否有两个或三个类似的 Java JDBC API

【讨论】:

    【解决方案2】:

    但问题是,如果我在数据库中插入一条新记录,JTable 不会获取新插入的行/数据。这是为什么?

    TableModel 不知道数据库何时更新。

    我该如何解决这个问题?

    如果您的应用程序正在向数据库添加行,那么它还需要同时向 TableModel 添加一行。

    【讨论】:

    • 我是初学者,如果我的猜测有误,请见谅。在我的代码中,我使用了“while(res.next())”循环。所以程序将检查并添加行,直到没有更多行。如果正确,那么它也会自动添加新行不是吗?
    • 这可行,但这意味着您每次添加一行时都需要重新创建 TableModel 并从数据库中读取所有数据。
    • 重新创建 TableModel 会影响应用程序的性能吗?即使我重新创建表模型,它仍然没有获得新创建的行。它假设获取新创建的行,但它没有检索它。
    猜你喜欢
    • 1970-01-01
    • 2013-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 2012-03-30
    • 1970-01-01
    • 2011-05-20
    相关资源
    最近更新 更多