我有一个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