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

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

最佳答案

我认为您正在寻找Oracle内置Database Change Notification,不确定是否可以在自由版本中访问Oracle,如果不是那么就不用介意,对于MySQL,是否有两三个类似的Java JDBC API

10-05 18:08
查看更多