2015-12-02 4 views
0

Я не могу загрузить данные в таблицу, несмотря на то, что динамически загружаю имя столбца. Когда я пытаюсь загрузить данные, ничего не появляется, несмотря на то, что Java Icon все еще отображается на панели задач. Не похоже, что что-то не так с GUI, поэтому мне было интересно, приведет ли открытие соединения из конструктора к логической ошибке. Я распечатал переменные locals во втором для цикла метода populateTable, чтобы проверить, были ли данные переданы в локальные переменные, и они это сделали, поэтому я точно не знаю, что вызывало эту ошибку.Jtable can not load data from database

вот код для графического интерфейса пользователя:

public class WeatherFrame extends JFrame { 

    private JPanel contentPane; 
    private JTable table; 
    HealthData health = new HealthData(); 
    private DefaultTableModel model; 
    String[] columnNames = {"zipcode", "county", "city", "state", "year", "month","ageGroup", 
          "numOfVisits", "MonthlyMax", "MonthlyMin", "MonthlyNor"}; 

    /** 
    * Launch the application. 
    */ 
    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 
      public void run() { 
       try { 
        WeatherFrame frame = new WeatherFrame(); 
        frame.setVisible(true); 
       } catch (Exception e) { 
        e.printStackTrace(); 
       } 
      } 
     }); 
    } 

    /** 
    * Create the frame. 
    */ 
    public WeatherFrame() { 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     setBounds(100, 100, 800, 300); 
     contentPane = new JPanel(); 
     contentPane.setBounds(100, 100,750, 200); 
     setContentPane(contentPane); 
     contentPane.setLayout(null); 

     JScrollPane scrollPane = new JScrollPane(); 
     scrollPane.setBounds(6, 25, 788, 180); 
     contentPane.add(scrollPane); 

     model = new DefaultTableModel(); 
     populateTable(); 
     table = new JTable(model); 

     scrollPane.setViewportView(table); 

     JButton btnInsert = new JButton("insert"); 
     btnInsert.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      } 
     }); 
     btnInsert.setBounds(315, 217, 117, 29); 
     contentPane.add(btnInsert); 

     JButton btnDelete = new JButton("delete"); 
     btnDelete.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      } 
     }); 
     btnDelete.setBounds(198, 243, 117, 29); 
     contentPane.add(btnDelete); 

     JButton btnSearch = new JButton("search"); 
     btnSearch.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      } 
     }); 
     btnSearch.setBounds(81, 243, 117, 29); 
     contentPane.add(btnSearch); 

     JLabel lblWeatherTable = new JLabel("Weather Table"); 
     lblWeatherTable.setBounds(149, 6, 107, 16); 
     contentPane.add(lblWeatherTable); 

     JButton btnNext = new JButton("update"); 
     btnNext.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent e) { 
      } 
     }); 
     btnNext.setBounds(198, 217, 117, 29); 
     contentPane.add(btnNext); 

     JButton btnRefresh = new JButton("refresh"); 
     btnRefresh.setBounds(81, 217, 117, 29); 
     contentPane.add(btnRefresh); 
    } 

    public void populateTable() { 

     for(String name: columnNames) 
      model.addColumn(name); 

     ArrayList<Health> healthdata = new ArrayList<Health>(); 
     healthdata = health.showAllData();         
     model.addRow(healthdata.toArray()); 
    } 
} 

это конструктор для класса HealthData

public HealthData(){ 
     try { 
      /* Connect to database */ 
      connection = DriverManager.getConnection(jdbcURL, MySQLConfig.user, MySQLConfig.password); 
      statement = connection.createStatement(); 
      data = new ArrayList<Health>(); 
     } catch (Exception e) 
     { 
      e.printStackTrace(); 
     } 

    } 

это код метода showAlldata

public ArrayList<Health> showAllData(){ 
     ArrayList<Health> list = new ArrayList<Health>(); 
     try { 
      connection = DriverManager.getConnection(jdbcURL, MySQLConfig.user, MySQLConfig.password); 
      Statement stmt = connection.createStatement(); 
      ResultSet result = stmt.executeQuery(SELECT_ALL_QUERY); 


      /* Get and print out data from health table : zipcode, county, city, state, year, month, ageGroup, numberOfVisits, MMax, MMin, MNor */ 
      while(result.next()){ 
       Health data = new Health(); 
       int zipcode = result.getInt(1); 
       data.setZipCode(zipcode); 
       String county = result.getString(2); 
       data.setCounty(county); 
       String city = result.getString(3); 
       data.setCity(city); 
       String state = result.getString(4); 
       data.setState(state); 
       int year = result.getInt(5); 
       data.setYear(year); 
       int month = result.getInt(6); 
       data.setMonth(month); 
       String ageGroup = result.getString(7); 
       data.setAgeGroup(ageGroup); 
       int numOfVisits = result.getInt(8); 
       data.setNumOfVisits(numOfVisits); 
       float MMax = result.getFloat(9); 
       data.setMMax(MMax); 
       float MMin = result.getFloat(10); 
       data.setMMin(MMin); 
       float MNor = result.getFloat(11); 
       data.setMNor(MNor); 
       list.add(data);  
       connection.close() 
       stmt.close(); 
      } 

     } catch (SQLException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return list; 
    } 

Может кто-то предложить решение для решения этой проблемы. Заранее благодарю за помощь. Я уже опубликовал вопрос об этом, но этот вопрос обновлен с обязательными кодами.

отредактировать код, чтобы сделать только один звонок в showAlldata, а также тесная связь и утверждение, однако, та же ошибка, по-прежнему сохраняются

+1

Ваш код по-прежнему использует пустые макеты. – camickr

+0

Да, я могу изменить его после исправления этой проблемы, но я не думаю, что проблема с нулевым расположением является проблемой. – KhoaVo

+0

Избегайте использования макетов «null», идеальные макеты пикселей - это иллюзия в современном дизайне ui. Слишком много факторов, которые влияют на индивидуальный размер компонентов, ни один из которых вы не можете контролировать. Swing был разработан для работы с менеджерами компоновки в ядре, отбросив их, не будет конца проблем и проблем, которые вы будете тратить все больше времени на исправление – MadProgrammer

ответ

0
public void populateTable() { 

     model = new DefaultTableModel(){ 

      @Override 
      public boolean isCellEditable(int row, int column) { 
       //all cells false 
       return false; 
      } 
     }; 

     for(String name: columnNames) 
      model.addColumn(name); 
     ArrayList<Health> temp = new ArrayList<Health>(); 
     temp = health.showAllData(); 
     for(int i = 0; i< temp.size(); i++) { 
      Object[] data = {temp.get(i).getZipCode(), temp.get(i).getCounty(), temp.get(i).getCounty(), temp.get(i).getState(),temp.get(i).getYear(), 
          temp.get(i).getMonth(), temp.get(i).getAgeGroup(), temp.get(i).getNumOfVisits(), temp.get(i).getMMax(), temp.get(i).getMMin(), temp.get(i).getMNor()}; 
      model.addRow(data); 
     } 
    } 

большое спасибо за помощь, я решил этот вопрос, изменив мой populateTable, как описано выше.