2012-11-18 1 views
1

나는 테이블을 가지고 있으며 프레임을 열면 테이블은 그 열과 각각의 헤더를 mysql 데이터베이스의 테이블에서받습니다. 스윙 테이블에 SQL 데이터베이스 테이블의 모든 값을 삽입 할 수 있습니까 ?? 위의 코드 X에서 여기 내 코드는 ...동적으로 정의 된 스윙 테이블에 데이터를 삽입하는 방법 (mysql 데이터베이스의 데이터)?

DefaultTableModel dtm=(DefaultTableModel)jTable1.getModel(); 
String query1=null; 
try { 
    query1="select * from "+Variables.table+";"; 
    ResultSet rsft=st.executeQuery(query1); 
    Object o[]=new Object[x]; 
    while(rsft.next()) {     
    for(int i=1;i<=x;i++){ 
     o[i-1]=rsft.getString(i); 
    } 
    dtm.addRow(o); 
    } 
} catch(Exception e) { 
    System.out.println(e.getMessage()); 
} 

는 SQL 테이블에 colums의 수를 나타내는 정수입니다. Variables.table은 테이블 이름을 포함하는 정적 변수입니다. 고맙습니다

답변

1

문제는 getColumnCount이 일부 행을 추가 했음에도 불구하고 여전히 0을 반환한다는 것입니다. setColumnCount으로 전화하십시오.

소스 코드에서이를 확인하거나 빠른 테스트를 수행 할 수 있습니다 (예 :

import javax.swing.table.DefaultTableModel; 

public class DefaultTableModelDemo { 
    public static void main(String[] args) { 
    DefaultTableModel defaultTableModel = new DefaultTableModel(); 
    defaultTableModel.addRow(new Object[]{"Test", "Test"}); 
    System.out.println("defaultTableModel.getRowCount() = " + 
     defaultTableModel.getRowCount()); 
    System.out.println("defaultTableModel.getColumnCount() = " + 
     defaultTableModel.getColumnCount()); 
    } 
} 

다음과 같은 출력을 제공

defaultTableModel.getRowCount() = 1 
defaultTableModel.getColumnCount() = 0 

그냥 먼저 데이터 벡터를 생성 한 다음 새 TableModel을 생성하고 JTable의 기존 TableModel을 대체하는 것이 더 쉬울 수 있습니다.

또한 말하십시오 dtm 이후

  • 이미 JTable에 사용됩니다, 당신은 단지 이벤트 발송 쓰레드에 업데이트해야합니다. 그러나 데이터베이스 연결/쿼리는 일반적으로 "느리게"수행되므로 EDT에서 수행하면 안됩니다. 호출을 SwingUtilities#invokeXXX 호출로 감싸거나 백그라운드 스레드에 TableModel을 새로 작성하고 EDT에서 한 번에 모델을 바꿔서이 문제를 피할 수 있습니다. 자세한 내용은 Swing concurrency tutorial을 참조하십시오. finally 블록
  • 은에서 ResultSetclose하는 것을 잊지 마세요
관련 문제