2017-08-26 48 views
1

的數據我想從MySQL顯示在JTable中的數據,但表現出從表格和更沒有最後一行。請幫幫我。我明白,我有一個問題,因爲JT =新的JTable(數據列)每次創建新表的每一行(刪除以前的),但我無法找到正確的選擇。如何在JTable中顯示從MySQL

public class Test2 extends JPanel { 

    static final String USERNAME = "root"; 
    static final String PASSWORD = "root"; 
    static final String CONN_STRING = "jdbc:mysql://localhost:3306/mydbtest?useSSL=false"; 

    JTable jt; 
    public Test2() { 

     try { 
      Connection conn; 
      conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD); 
      Statement stmt = (Statement) conn.createStatement(); 
      String query = "Select title, season, episode from movie"; 
      ResultSet rs = stmt.executeQuery(query); 

      rs.beforeFirst(); 

      while (rs.next()) { 
       String title = rs.getString("Title"); 
       String season = rs.getString("Season"); 
       String episode = rs.getString("Episode"); 

      String[] columns = {"Title", "S", "E"}; 
      String[][] data = {{title, season, episode}}; 


      jt = new JTable(data, columns); 
      }; 

      jt.setPreferredScrollableViewportSize(new Dimension(450, 63)); 
      jt.setFillsViewportHeight(true); 

      JScrollPane jps = new JScrollPane(jt); 
      add(jps); 
     } 
     catch (Exception er) {System.err.println(er);} 
    } 

    public static void main(String[] args) { 
     JFrame jf = new JFrame(); 
     Test2 t = new Test2(); 
     jf.setTitle("Test"); 
     jf.setSize(500,500); 
     jf.setVisible(true); 
     jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
     jf.add(t); 
    } 
} 

回答

2

你的問題是在這裏:

while (rs.next()) { 
    String title = rs.getString("Title"); 
    String season = rs.getString("Season"); 
    String episode = rs.getString("Episode"); 

    String[] columns = { "Title", "S", "E" }; 
    String[][] data = { { title, season, episode } }; 

    jt = new JTable(data, columns); // *** you're making many JTables here!! *** 
} 

每次while循環迴路,創建丟棄一個新的JTable對象。唯一的例外是通過循環的最後時間,從結果集的最後一行的數據不被丟棄,然後在創建最終JTable中顯示。爲了解決這個問題,以顯示所有的JTable中的數據的,你需要整理while循環中所有的結果集數據,然後將其添加到JTable,而要做到這一點最簡單的方法是創建一個表模型,在這裏簡單的DefaultTableModel,前while循環,而while循環中的結果集的每一行數據內填充它:

// create a table model with the appropriate column headers 
// and with 0 rows (to start with) 
String[] columnNames = {"Title", "Season", "Episode"}; 
DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0); 

while (rs.next()) { 
    String title = rs.getString("Title"); 
    String season = rs.getString("Season"); 
    String episode = rs.getString("Episode"); 

    // create a single array of one row's worth of data 
    String[] data = { title, season, episode } ; 

    // and add this row of data into the table model 
    tableModel.addRow(data); 
} 

jt.setModel(tableModel); // place model into JTable 

或許更好,改變最後一行:

jt = new JTable(tableModel); // to create a new JTable 
+0

的想法是非常聰明的,但現在顯示錯誤顯示java.lang.NullPointerException。什麼理由? – Yevgen

+0

@Yevgen:這是一個單獨的問題,你應該調試。如果您還沒有這樣做,請檢查關於此主題的規範問題的答案:[什麼是NullPointerException,以及如何解決它?](http://stackoverflow.com/questions/218384/what-is- A-NullPointerException異常和知識-DO-I-FIX-IT)。 –

+0

@Yevgen:用於調試NullPointerException的啓發式幾乎總是相同的:您應該仔細閱讀您的異常的堆棧跟蹤,以查找出錯的代碼行,引發異常的行,然後仔細檢查該行,找出哪個變量爲空,然後追溯到您的代碼以查看原因。你會一次又一次遇到這些,相信我。 –