如何从另一个类访问mysql数据库中的变量?

gzszwxb4  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(317)

我正在尝试从一个类访问另一个类中的变量。
在下面的例子中,我有两个文件,一个叫做 login.java 以及 usermainpage.java .
我想访问一个名为 sessionId 那是在 login.javausermainpage 类文件。
我尝试了几种方法,但根本不起作用,在登录类文件中,我声明 sessionId 作为一个 public string 在文件中,我将其定义为等于从数据库中检索到的数据(如果你看到的代码,我正在做一个数据库连接(也)。
我想,通过在函数末尾返回sessionid,我现在可以从所有其他java文件访问这个变量,但在我的 usermainpage.java 文件,我试着打印出来 sessionId 它什么也没显示。告诉我一个解决办法,谢谢。

// login.java file
public class login extends javax.swing.JFrame {
    public String sessionId;
    Connection con;
    PreparedStatement pst;
    ResultSet rs;

    private String LoginButtonActionPerformed(java.awt.event.ActionEvent evt) {
        try{
            String query = "SELECT * FROM `accounts` WHERE username=? and password=?";
            con = DriverManager.getConnection("jdbc:mysql://localhost/restock", "root", "password");
            pst = con.prepareStatement(query);
            pst.setString(1, txtUsername.getText());
            pst.setString(2, txtPassword.getText());
            rs = pst.executeQuery();
            if(rs.next()){
                String userType = rs.getString("usertype");
                sessionId = rs.getString("id");
                System.out.print("##########" + sessionId + "##########"); //this prints out the id I want
                if(userType.equals("Admin")){
                    JOptionPane.showMessageDialog(this, "Login is successful as admin");
                    mainpage admin = new mainpage();
                    admin.setVisible(true);
                    dispose();
                } else{
                    JOptionPane.showMessageDialog(this, "Login is successful as user");
                    usermainpage user = new usermainpage();
                    user.setVisible(true);
                    dispose();
                }
            }
            else{
                JOptionPane.showMessageDialog(this, "Incorrect username or password");
                txtUsername.setText("");
                txtPassword.setText("");
            }

        } catch(HeadlessException | SQLException ex){
            JOptionPane.showMessageDialog(this, ex.getMessage());
        }

        return sessionId;

    }

}

//usermainpage.java file
public class usermainpage extends javax.swing.JFrame {

    private void RequestButtonActionPerformed(java.awt.event.ActionEvent evt) {                                              
          String type = txttype.getSelectedItem().toString();
          String name = txtname.getText();
          String quantity = txtquantity.getText();
          String status = "Pending";
          String userId;

          //Create new class object from login.java
          login testing = new login();
          userId = testing.sessionId;
          System.out.print("########## " + userId + "########## "); //this prints out null value
     }
}

编辑:这些是我根据建议遇到的一些问题。



zsbz8rwp

zsbz8rwp1#

你的代码有很多问题:
您应该始终遵循java命名约定,例如,您应该将类命名为 Login 而不是 login . 同样,方法的名称应该是 loginButtonActionPerformed 而不是 LoginButtonActionPerformed .
我看不出这个参数有什么用处, java.awt.event.ActionEvent evt 用你的方法, LoginButtonActionPerformed . 我会把它从定义和调用中删除。
你应该避免制造变量 public . 你应该保持 sessionId 作为 private 或者 protected 根据要求创建 public 它的存取器和变异器如下所示:

private String sessionId;

public setSessionId(String sessionId) {
    this.sessionId = sessionId;
}

public String getSessionId() {
    return sessionId;
}

您正在返回 sessionId 从方法上看, LoginButtonActionPerformed 因此你需要在你的方法中调用这个方法, RequestButtonActionPerformed 具体如下:

login testing = new login();
userId = testing.LoginButtonActionPerformed(evt);

但是,为此,您需要声明您的方法, LoginButtonActionPerformed 作为 public .
更好的方法是 LoginButtonActionPerformed 作为 public void 然后你可以做:

login testing = new login();
testing.LoginButtonActionPerformed(evt);
userId = testing.getSessionId();

相关问题