代码之家  ›  专栏  ›  技术社区  ›  Yevgen

如何在JTable中显示MySQL中的数据

  •  1
  • Yevgen  · 技术社区  · 9 年前

    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 回复  |  直到 9 年前
        1
  •  5
  •   Hovercraft Full Of Eels    9 年前

    你的问题是:

    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循环循环时,您都会创建 和 丢弃 全部的 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
    
        2
  •  1
  •   Harindu Lakshan    6 年前

    public final void EmployeeGridView(){
    
        try{
    
            Connection conn = DBConn.connect();
            PreparedStatement ps = conn.prepareStatement("Select * from empdetails");
            ResultSet rs=ps.executeQuery();
            DefaultTableModel tm = (DefaultTableModel)jTable1.getModel();
            tm.setRowCount(0);
    
            while(rs.next()){
    
                Object o[] = {rs.getInt("EMPID"),rs.getString("FirstName"),rs.getString("LastName"),rs.getString("Designation"),rs.getString("NIC"),rs.getString("PhoneNO"),rs.getString("DOB"),rs.getString("Address"),rs.getString("Gender")};
                tm.addRow(o);
    
    
    
            }
    
    
        }
        catch(Exception e){
    
            JOptionPane.showMessageDialog(null,"Error in Employee Grid View..... "+e);
        }
    
    
    
    }