Java 可更新的结果集行数
我想将数据库表绑定到swing JTable,并通过在可更新的ResultSet(#insertRow,#deleteRow(),#updateRow()中使用API使该JTable可编辑 因此,我需要通过包装一个ResultSet来创建一个TableModel实现Java 可更新的结果集行数,java,swing,jdbc,resultset,Java,Swing,Jdbc,Resultset,我想将数据库表绑定到swing JTable,并通过在可更新的ResultSet(#insertRow,#deleteRow(),#updateRow()中使用API使该JTable可编辑 因此,我需要通过包装一个ResultSet来创建一个TableModel实现 public class MyTableModel implements TableModel { private ResultSet rs; private ResultSetMetaData rsmd; @Override
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) {
}
如何同步JTable UI和基础结果集?您不应该这样做。ResultSet需要与数据库的开放连接,在提交连接之前,对结果集所做的更改不会提交到数据库 这意味着,如果数据库决定关闭连接,因为它有一段时间没有看到任何活动,或者如果你的应用程序在三小时后崩溃,你将丢失这三小时内所做的所有修改 这也意味着您可能会将某些行锁定一整段时间,从而使其他事务等待一整段时间才能执行任何操作
将结果集中的数据复制到表模型中,并在每次需要插入或更新行时启动新事务。要将JTable绑定到数据库,需要刷新JTable并重新编码JTable。要获得结果集中的行数,只需调用这两个方法-
rs.last();
int count = rs.getRow();
此处count为您提供结果集中的记录数。当您在结果集中执行insertRow()时,“您无法在结果集中看到插入结果”。要查看插入的行,您必须重新运行查询并获得新的结果集
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) {
}
有关“没有结果集类型可以看到结果集插入操作插入的行”的参考信息,请参阅