簡體   English   中英

可更新的ResultSet行計數

[英]Updatable ResultSet row count

我想將數據庫表綁定到擺動的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?

你不應該這樣做。 ResultSet需要與數據庫的開放連接,並且在提交連接之前,對結果集所做的更改將不會提交給數據庫。

這意味着如果數據庫決定關閉連接,因為它在一段時間內沒有看到任何活動,或者如果您的應用程序在三小時后崩潰,那么您將失去在這3小時內完成的所有修改。

這也意味着您可能會在很長一段時間內鎖定某些行,從而使其他事務等待很長時間才能執行任何操作。

將結果集中的數據復制到表模型中,並在每次需要插入或更新行時啟動新事務。

在ResultSet上執行insertRow()時“在ResultSet 上看不到INSERT結果” 要查看插入的行,您必須重新運行查詢並獲取新的結果集。

有關“ 沒有結果集類型可以看到由結果集INSERT操作插入的行。 ”的參考,請參見http://docs.oracle.com/cd/B28359_01/java.111/b31224/resltset.htm#i1024719

要將JTable綁定到數據庫,您需要刷新JTable並釋放JTable。 得到沒有。 結果集中的行數只需調用這兩個方法-

rs.last();
int count = rs.getRow();

這里算不給你。 ResultSet中的記錄數。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM