将数据库数据显示到JTable中

时间:2013-07-19 22:35:31

标签: java swing jdbc jtable

public class d7Table extends JFrame {

    String dbName = "mydb";
    String bdUser = "root";
    String dbPassword = "2323";
    String dbUrl = "jdbc:mysql://localhost/mydb";
    Connection con = null;
    PreparedStatement stm = null;
    ResultSet res = null;
    public JTable table;

    public d7Table() {
        try {
            con = DriverManager.getConnection(dbUrl, bdUser, dbPassword);
            System.out.println("Connected to database successfully!");
            res = stm.executeQuery("select * from mytable");

            table = new JTable(myTableModel(res));
            JOptionPane.showMessageDialog(null, new JScrollPane(table));

        } catch (SQLException ex) {
            System.out.println("Could not connect to database");
        }

        add(new JScrollPane(table), BorderLayout.CENTER);
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setSize(800, 600);
        this.setLocation(300, 60);
        this.setVisible(true);

    }

    public static DefaultTableModel myTableModel(ResultSet rs) throws SQLException {
        ResultSetMetaData metadata = (ResultSetMetaData) rs.getMetaData();
        int columnsCount = metadata.getColumnCount();
        Vector<String> columnNames = new Vector<>();
        for (int i = 1; i < columnsCount; i++) {
            columnNames.add(metadata.getColumnName(i));
        }
        Vector<Object> data = new Vector<>();
        while (rs.next()) {
            Vector<Object> eachLine = new Vector<>();
            for (int i = 1; i < columnsCount; i++) {
                eachLine.add(rs.getObject(i));
            }
            data.add(eachLine);
        }
        return new DefaultTableModel(data, columnNames);

    }

    public static void main(String[] args) {
        SwingUtilities.invokeLater(new Runnable() {
            @Override
            public void run() {
                new d7Table();
            }
        });
    }
}

我的错误:

Connected to database successfully!
 Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at JDBCtest.d7Table.<init>(d7Table.java:33)  // refer to res =stm.execute... Row
at JDBCtest.d7Table$1.run(d7Table.java:73)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
...

2 个答案:

答案 0 :(得分:2)

在查询之前,您忘记在变量Statement中获取stm。使用此代码执行此操作:

stm = con.createStatement();

答案 1 :(得分:1)

在这一行

res = stm.executeQuery("select * from mytable");

stm变量仍为null,导致NullPointerException。你从来没有初始化它。

创建PreparedStatement的正确步骤是在prepareStatement对象上调用Connection

但是你没有绑定变量;你这里只需要一个Statement。将stm声明为Statement,并在连接后执行以下操作:

stm = con.createStatement();

然后您可以使用Statement执行查询,因为您已拥有此行:

res = stm.executeQuery("select * from mytable");