[英]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.