如何从另一个类访问mysql数据库中的变量?
Posted
技术标签:
【中文标题】如何从另一个类访问mysql数据库中的变量?【英文标题】:How to access a variable in mysql database from another class? 【发布时间】:2020-08-09 17:45:30 【问题描述】:我正在尝试从另一个类中访问一个变量。
在下面的示例中,我有 2 个文件,一个名为 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
编辑:这些是我根据建议遇到的一些问题。
【问题讨论】:
关注Java naming conventions。 @ArvindKumarAvinash 嗨,有什么办法可以解决这个问题吗? 【参考方案1】:你的代码有很多问题:
您应该始终关注Java naming conventions,例如你应该将你的班级命名为Login
而不是login
。同样,您的方法的名称应该是loginButtonActionPerformed
而不是LoginButtonActionPerformed
。
我在您的方法LoginButtonActionPerformed
中没有看到参数java.awt.event.ActionEvent evt
的任何用途。我会从它的定义和调用中删除它。
您应该避免使用变量public
。您应该将sessionId
保留为private
或protected
as per the requirement 并为其创建public
访问器和修改器,如下所示:
private String sessionId;
public setSessionId(String sessionId)
this.sessionId = sessionId;
public String getSessionId()
return sessionId;
您正在从方法LoginButtonActionPerformed
返回sessionId
的值,因此您需要在您的方法RequestButtonActionPerformed
中调用此方法,如下所示:
login testing = new login();
userId = testing.LoginButtonActionPerformed(evt);
但是,为此,您需要将方法 LoginButtonActionPerformed
声明为 public
。
更好的方法是将LoginButtonActionPerformed
声明为public void
,然后您可以这样做:
login testing = new login();
testing.LoginButtonActionPerformed(evt);
userId = testing.getSessionId();
【讨论】:
我刚刚将 LoginButton 函数声明为 public,在另一个 java 类文件中我做了“userId = testing.LoginButtonActionPerformed(evt);”正如你所说,但有一个错误,建议是创建局部变量 evt,或创建参数 evt 并创建一个字段 evt 所有选项仍然为我返回 null 我也无法删除登录功能中的操作 evt,因为我正在使用此“LoginButton.addActionListener(new java.awt.event.ActionListener() public void actionPerformed(java.awt.event. ActionEvent evt) LoginButtonActionPerformed(evt); );" 签名RequestButtonActionPerformed(java.awt.event.ActionEvent evt)
已经有一个名称为evt
的参数。所以,你只是将这个evt
传递给LoginButtonActionPerformed
,这应该不是问题。您可以使用答案中的所有建议来编辑您的问题吗?这将花费您 5 分钟,但可以为您节省大量精力来处理问题。我会等你的更新。
我可以清楚地看到问题所在。您正在从没有java.awt.event.ActionEvent evt
的DisplayRecords
呼叫LoginButtonActionPerformed
。这就是为什么我要求您将LoginButtonActionPerformed
声明为void
(答案中的检查点#5)。之后,在DisplayRecords
方法中,您可以执行login testing = new login(); String userId = testing.getSessionId();
。
我明白先生,但是在尝试了您的解决方案之后它仍然是空的,让我给你看一下我写的东西以上是关于如何从另一个类访问mysql数据库中的变量?的主要内容,如果未能解决你的问题,请参考以下文章
如何从另一个 UIView 类访问 UIControl 的值