我有一个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就不会得到新插入的行/数据。为什么是这样,我怎样才能解决这个问题?
更新:--当我提交新插入时,它正在检索数据。所以每次更新时我都要提交吗?或者还有其他方法可以做到这一点?
发布于 2011-11-27 22:03:01
我认为您正在寻找Oracle内置的数据库更改通知,不确定甲骨文在免费版本中是否可以访问,如果不是,那就算了,对于MySQL,JDBC有两三种相似的API
发布于 2011-11-27 21:44:32
但是问题是,如果我在数据库中插入一个新记录,JTable就不会得到新插入的行/数据。为什么会这样呢?
TableModel不知道何时更新数据库。
我怎样才能解决这个问题?
如果您的应用程序要将该行添加到数据库中,那么它还需要同时向TableModel添加一行。
https://stackoverflow.com/questions/8289240
复制相似问题