java如何从另一个类访问mysql数据库中的变量?
我试图从一个类访问另一个类中的变量
在下面的示例中,我有两个文件,一个名为login.java
和usermainpage.java
。
我想从usermainpage
类文件访问login.java
中名为sessionId
的变量
我尝试了几种方法,但根本不起作用,在登录类文件中,我将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
}
}
编辑:以下是我根据建议遇到的一些问题
# 1 楼答案
你的代码有很多问题:
你应该始终遵循Java naming conventions例如,你应该将你的类命名为
Login
,而不是login
。同样,方法的名称应该是loginButtonActionPerformed
,而不是LoginButtonActionPerformed
我看不到参数
java.awt.event.ActionEvent evt
在您的方法LoginButtonActionPerformed
中有任何用途。我会从它的定义和调用中删除它你应该避免使用变量
public
。您应该将sessionId
保留为private
或protected
{a2},并为其创建public
访问器和变异器,如下所示:您正在从方法
LoginButtonActionPerformed
返回sessionId
的值,因此需要在方法RequestButtonActionPerformed
内调用此方法,如下所示:但是,为此,您需要将方法
LoginButtonActionPerformed
声明为public
更好的方法是将
LoginButtonActionPerformed
声明为public void
,然后可以执行以下操作: