我有一个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就不会获得新插入的行/数据。为什么这样,我该如何解决这个问题?
更新 它在我提交新插入时检索数据。所以每次更新时都必须提交?或者还有其他方法吗?
答案 0 :(得分:3)
但问题是如果我在数据库中插入新记录,JTable就不会获得新插入的行/数据。这是为什么?
TableModel不知道数据库何时更新。
我该如何解决这个问题?
如果您的应用程序正在将行添加到数据库,那么它还需要同时向TableModel添加一行。
答案 1 :(得分:3)
我认为您正在寻找Oracle内置Database Change Notification,不确定是否可以访问Oracle的免费版本,如果没有,那就不用了,因为MySQL有两三个用于Java JDBC的similair API < / p>