JTable不显示新插入的行/数据

时间:2011-11-27 21:32:43

标签: java oracle swing jdbc jtable

我有一个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就不会获得新插入的行/数据。为什么这样,我该如何解决这个问题?

更新 它在我提交新插入时检索数据。所以每次更新时都必须提交?或者还有其他方法吗?

2 个答案:

答案 0 :(得分:3)

  

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

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

  

我该如何解决这个问题?

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

答案 1 :(得分:3)

我认为您正在寻找Oracle内置Database Change Notification,不确定是否可以访问Oracle的免费版本,如果没有,那就不用了,因为MySQL有两三个用于Java JDBC的similair API < / p>