我想将数据库表绑定到swing JTable,并通过在可更新的ResultSet(#insertRow,#deleteRow(),#updateRow())中使用API来使JTable可编辑。
所以我需要通过包装ResultSet来创建一个TableModel实现。
public class MyTableModel implements TableModel {
private ResultSet rs;
private ResultSetMetaData rsmd;
@Override
public int getRowCount() {
return 0;
}
@Override
public int getColumnCount() {
return 0;
}
@Override
public String getColumnName(int columnIndex) {
return null;
}
@Override
public Class<?> getColumnClass(int columnIndex) {
return null;
}
@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
return false;
}
@Override
public Object getValueAt(int rowIndex, int columnIndex) {
return null;
}
@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {
}
@Override
public void addTableModelListener(TableModelListener l) {
}
@Override
public void removeTableModelListener(TableModelListener l) {
}
}
然后,我如何实现getRowCount()方法?
如何确定可更新结果集中的行数?
例如,如果用户单击“添加行”按钮,则调用此类方法:
rs.moveToInsertRow();
rs.updateString(1, "yqwang");
rs.insertRow();
如何同步JTable UI和底层ResultSet?
答案 0 :(得分:3)
你不应该这样做。 ResultSet需要与数据库的开放连接,并且在您提交连接之前,对结果集所做的更改不会提交到数据库。
这意味着如果数据库决定关闭连接,因为它在一段时间内没有看到任何活动,或者如果您的应用程序在三小时后崩溃,那么您将失去在这3小时内完成的所有修改。
这也意味着您可能会在很长一段时间内锁定某些行,从而使其他事务等待很长时间才能执行任何操作。
将结果集中的数据复制到表模型中,并在每次需要插入或更新行时启动新事务。
答案 1 :(得分:0)
要将JTable绑定到数据库,您需要刷新JTable并重新启动JTable。没有。结果集中的行只调用这两个方法 -
rs.last();
int count = rs.getRow();
这里算不给你。结果集中的记录。
答案 2 :(得分:0)
在ResultSet &#34上执行insertRow()时,您无法在ResultSet&#34; 上看到INSERT结果。要查看插入的行,您必须重新运行您的查询并获取新的结果集。
参考&#34; 没有结果集类型可以看到结果集INSERT操作插入的行。&#34;见http://docs.oracle.com/cd/B28359_01/java.111/b31224/resltset.htm#i1024719