Java 可更新的结果集行数

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

我想将数据库表绑定到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) {

}

如何同步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) {

}
有关“没有结果集类型可以看到结果集插入操作插入的行”的参考信息,请参阅