【发布时间】:2012-01-07 12:32:12
【问题描述】:
我有一个 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 不会获取新插入的行/数据。为什么会这样?我该如何解决这个问题?
更新: 当我提交我的新插入时,它正在检索数据。那么每次更新时我都必须提交吗?或者有没有其他方法可以做到这一点?
【问题讨论】:
-
根据您的实现,每次在数据库中添加一行时,您都需要创建一个新的表模型。在数据库中添加一行后,您是否再次调用
getALLStudents()? -
我是Java初学者,所以对Java的函数了解不多。有没有其他方法可以只更新行而不是创建新的表模型?
标签: java oracle swing jdbc jtable