可更新的ResultSet行计数

时间:2011-12-26 09:39:59

标签: 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 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?

3 个答案:

答案 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