2011-12-26 1 views
1

데이터베이스 테이블을 스윙 JTable에 바인딩하고 업데이트 가능한 ResultSet (# insertRow, # deleteRow(), # updateRow())에서 API를 사용하여 해당 JTable을 편집 가능하게하려고합니다.Updatable ResultSet 행 수

그래서 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 및 기본 결과 집합 동기화하려면?

답변

3

그렇게해서는 안됩니다. ResultSet은 데이터베이스에 열린 연결을 필요로하며 연결을 커밋하기 전까지 결과 집합에 대한 변경 사항은 데이터베이스에 커밋되지 않습니다.

즉, 데이터베이스가 일정 시간 동안 아무런 활동도 보지 못했거나 연결이 종료 된 후 3 시간 후에 응용 프로그램이 다운되면 연결을 종료하기로 결정하면이 3 시간 동안 수행 한 모든 수정 사항을 잃게됩니다.

이것은 또한 많은 시간 동안 일부 행을 잠글 수 있으며, 따라서 다른 트랜잭션이 많은 시간 동안 기다려서 아무 것도 할 수 없다는 것을 의미합니다.

결과 집합의 데이터를 테이블 모델에 복사하고 행을 삽입하거나 업데이트해야 할 때마다 새 트랜잭션을 시작하십시오.

0

JTable을 데이터베이스에 바인딩하려면 JTable을 새로 고치고 JTable을 relode해야합니다. 안된다. 결과 세트의 행 수는 다음 두 메소드를 호출하십시오.

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

여기 수는 없습니다. ResultSet에있는 레코드 수.