public class RetriveUser extends ContactInformation {
    public void retriveUser(){
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    Container content = this.getContentPane();
    this.setLayout(new FlowLayout());

    Connection connection;
    ResultSet resultSet;
    Statement statement = null;
    Vector data = new Vector();

    try {
        connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/contact_info","root","");
        System.out.println("Connection established");
        statement = connection.createStatement();
        resultSet = statement.executeQuery(retriveUser);
        ResultSetMetaData metaData =resultSet.getMetaData();
        int columns = metaData.getColumnCount();

        while (resultSet.next()){
            Vector row = new Vector(columns);
            for (int i=1; i<=columns; i++){
                row.addElement(resultSet.getObject(i));
            }
            data.addElement(row);

        }


    } catch (SQLException e) {
        System.out.println("Exception occur");
        e.printStackTrace();
    }
    Vector columnName = new Vector();
    columnName.addElement("id");
    columnName.addElement("first_name");
    columnName.addElement("last_name");
    columnName.addElement("district");
    columnName.addElement("city");
    columnName.addElement("address");
    columnName.addElement("father_name");
    columnName.addElement("mobile_no");
    columnName.addElement("email");

    table = new JTable(data,columnName);
    JPanel tabPanel = new JPanel();
    tabPanel.add(table);
    content.add(tabPanel,BorderLayout.SOUTH);
}


}

我已经做了一个主班,并且正在这堂课中扩展主班。因此,虽然我已经从RetriveUser.retriveUser()等主类调用了该类;它显示了无法从静态方法引用的非静态方法..因此,如何从主类ContactInformation类进行调用。

最佳答案

您的主类是静态的,您的retriveUser()不是。您可以将retriveUser方法标记为静态(由于在该方法中使用实例变量,现在将无法使用),或者像这样创建RetriveUser的实例

 public static void main(String[] args) {
    new RetriveUser().retriveUser();
 }


至少可以从语法上解决您的问题。

请注意,用于与数据库建立连接的代码应单独管理。 GUI(JTable)和用户检索也是如此。对于此示例,您至少应具有3个单独的类。

07-26 03:21