Most simple code to populate JTable from ResultSet

前端 未结 10 973
慢半拍i
慢半拍i 2020-11-22 11:22

I googled the whole day and no luck. I call getnPrintAllData() method after pressing OK button. So the code is:

public class DatabaseSQLiteConne         


        
10条回答
  •  轻奢々
    轻奢々 (楼主)
    2020-11-22 12:01

    go here java tips weblog

    then,put in your project : listtabelmodel.java and rowtablemodel.java add another class with this code:

        enter code here
    /*
     * To change this license header, choose License Headers in Project Properties.
     * To change this template file, choose Tools | Templates
     * and open the template in the editor.
     */
    package comp;
    
    import java.awt.*;
    import java.sql.*;
    import java.util.*;
    import javax.swing.*;
    import static javax.swing.JFrame.EXIT_ON_CLOSE;
    import javax.swing.table.*;
    
    public class TableFromDatabase extends JPanel {
    
        private Connection conexao = null;
    
        public TableFromDatabase() {
            Vector columnNames = new Vector();
            Vector data = new Vector();
    
            try {
                //  Connect to an Access Database
                conexao = DriverManager.getConnection("jdbc:mysql://" + "localhost"
                        + ":3306/yourdatabase", "root", "password");
    
                //  Read data from a table
                String sql = "select * from tb_something";
                Statement stmt = conexao.createStatement();
                ResultSet rs = stmt.executeQuery(sql);
                ResultSetMetaData md = rs.getMetaData();
                int columns = md.getColumnCount();
    
                //  Get column names
                for (int i = 1; i <= columns; i++) {
                    columnNames.addElement(md.getColumnName(i));
                }
    
                //  Get row data
                while (rs.next()) {
                    Vector row = new Vector(columns);
    
                    for (int i = 1; i <= columns; i++) {
                        row.addElement(rs.getObject(i));
                    }
    
                    data.addElement(row);
                }
    
                rs.close();
                stmt.close();
                conexao.close();
            } catch (Exception e) {
                System.out.println(e);
            }
    
            //  Create table with database data
            JTable table = new JTable(data, columnNames) {
                public Class getColumnClass(int column) {
                    for (int row = 0; row < getRowCount(); row++) {
                        Object o = getValueAt(row, column);
    
                        if (o != null) {
                            return o.getClass();
                        }
                    }
    
                    return Object.class;
                }
            };
    
            JScrollPane scrollPane = new JScrollPane(table);
            add(scrollPane);
    
            JPanel buttonPanel = new JPanel();
            add(buttonPanel, BorderLayout.SOUTH);
        }
    
        public static void main(String[] args) {
    
            javax.swing.SwingUtilities.invokeLater(new Runnable() {
                public void run() {
                    JFrame frame = new JFrame("any");
                    frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    
                    //Create and set up the content pane.
                    TableFromDatabase newContentPane = new TableFromDatabase();
                    newContentPane.setOpaque(true); //content panes must be opaque
                    frame.setContentPane(newContentPane);
    
                    //Display the window.
                    frame.pack();
                    frame.setVisible(true);
                }
            });
    
        }
    }
    

    then drag this class to you jframe,and it's done

    it's deprecated,but it works.........

提交回复
热议问题