2016-09-20 8 views
0

나는 DefaultTableModel을 사용하여 채우기를 원하는 JTable을 가지고 있습니다. 안타깝게도 내 출력은 배열로 제공되고 내가 원하는대로 새 행으로 제공되지 않습니다. 아래 코드를보고 더 자세한 설명이 필요한지 물어보십시오! :) 여기Java DefaultDataTable 동적 값

dataTable.setModel(new javax.swing.table.DefaultTableModel(new Object [][] { 
        DatabaseInteraction.getCityInfo("").get("datas").toArray() 

      }, 
        DatabaseInteraction.getCityInfo("").get("columns").toArray())); 

데이터베이스 상호 작용 기능 :

public static Map<String,List<String>> getCityInfo(String query) 
{ 
    if(query.isEmpty()){ 
     query = "SELECT * FROM "+ database+ "." +table; 
    } 

    try { 
     Statement stmt = getConn().createStatement(); 
     ResultSet rs; 
     rs = stmt.executeQuery(query); 
     ResultSetMetaData rsmd = rs.getMetaData(); 


     //Get Column names 
     List<String> cNames = new ArrayList(); 
     List<Object> results = new ArrayList<Object>(); 

     for (int i = 1; i <= rsmd.getColumnCount(); i++){ 
      cNames.add(rsmd.getColumnName(i)); 
     } 

     //Get Data 
     while (rs.next()) { 
      List<String> tempResults = new ArrayList(); 

      for (int i = 1; i <= rsmd.getColumnCount(); i++) { 
       tempResults.add(rs.getString(i)); 

       if(i == rsmd.getColumnCount()){ 
        results.add(tempResults); 

       } 

      } 
     } 


     HashMap map =new HashMap(); 
     map.put("columns",cNames); 
     map.put("datas",results); 
     System.out.println(map); 
     return map; 

    } 

난 내 콘솔에서 얻을 출력은 다음과 같습니다 {열 = [사용자 이름, 암호, 무료, datas = [[HEJ, HEJ 1 [Brugernavn, Password, 1], [Brugernavn1, Password, 0], [test1, test2, 1], [,, 1]]} 나에게 좋았지 만 이전에 말했듯이 배열로 붙이면된다. 하나의 배열이 아니라 새로운 행.

답변

0

벡터을 사용하여 DefaultTableModel을 만들 것을 권장합니다. 당신은 그런 일 사용할 수 있습니다 : 당신의 주요 방법

public static DefaultTableModel createModel(ResultSet rs){ 
    DefaultTableModel dtm = new DefaultTableModel(); 
    Vector rowVectors = new Vector(); 
    Vector columnHeaderVector = new Vector(); 

    //To get rows correctly 
    int columncount = rs.getMetaData().getColumnCount(); 

    //Iterating all data and creating rows vector 
    while(rs.next()) 
    { 
     //It seems confusing to newbies, 
     //for defaultTableModel we need a vector containing rows(as a vector) 
     Vector singleRow = new Vector(); 
     for(int i=1;i<=columncount;i++) 
     { 
      singleRow.addElement(rs.getObject(i)); 
     } 
     rowVectors.addElement(singleRow); 
    } 

    //Creating header for table 
    for(int i=1;i<=columncount;i++) 
    { 
     columnHeaderVector.addElement(rs.getMetaData().getColumnName(i)); 
    } 

    //Setting vectors to the model 
    dtm.setDataVector(rowVectors, columnHeaderVector); 
    return dtm;  } 

을 또는 당신은 JTable의를 만들 WHERE

ResultSet rs; 
rs = stmt.executeQuery(query); 
DefaultTableModel dtm = createModel(rs); 
dataTable.setModel(dtm); 

이 내가 여기에 쓴 몇 가지 오류를 할 수 있고, 너무 시도/catch 블록이어야한다 하지만 수정하여 추가 할 수 있습니다.

+0

도움을 주셔서 감사합니다. 이렇게하면 열 이름이 잘 추가됩니다! 하지만 데이터를 추가하지는 않습니까? 왜 그런지 알아? :) –

+0

JTable에 새로운 DefaultTableModel을 추가해야하기 때문에 (모델을 생성하기위한 새로운 루프) – mKorbel

+0

@PatrickHansen add Sytem.out.println (rs.getObject (i)); before singleRow.addELement (rs.getObject (i)); 데이터베이스에서 데이터를 제대로 가져 왔는지 확인하십시오. 그렇지 않다면 쿼리와 데이터베이스를 확인해야합니다. – trd3v3lop