【问题标题】:How to retrieve username and password in another class?如何在另一个类中检索用户名和密码?
【发布时间】:2012-12-12 20:47:19
【问题描述】:

以下 LOGINFORM 类存储用于登录 GUI 的正确用户名和密码。

登录类....

public class LoginForm extends javax.swing.JFrame {

String username;
String password;

//rest of code here

我如何检索要在该行中另一个类的准备语句中使用的登录表单用户名和密码 ("SELECT * FROM AcademicInfo where Email=? and Password=?");替换 ? ,这将使我能够从 sql 数据库中获取特定字段?

检索类....

public void retrieveAcademic() {

try {
pst = con.prepareStatement("SELECT * FROM AcademicInfo where Username=? and Password=?");
rs = pst.executeQuery();
while (rs.next()) {
          title = (rs.getString(2));
          forename = (rs.getString(3));
          surname = (rs.getString(4));
          role = (rs.getString(5));
          room = (rs.getString(6));
          page = (rs.getString(7));
          hours = (rs.getString(8));
          phone = (rs.getString(9));
          mobile = (rs.getString(10));
          email = (rs.getString(11));


         } //end while
  } 

【问题讨论】:

  • 哇,这真的很基础。我建议你先读一本关于 Java 的书。
  • 你什么也没告诉我们。 retrieveAcademic() 写在哪里(哪个类)?
  • 一个实例化 LoginForm 对象的 serperate 类

标签: java mysql sql database


【解决方案1】:

Loginform 需要一个对包含retrieveAcademic() 方法的类的实例的引用。如何创建/传递该引用很大程度上取决于应用程序的结构(例如,通过依赖注入、简单构造等)。

请注意,另一种方法是让您的 db 相关类引用 LoginForm 并调用适当的 getter,例如getPassword()getUsername()

然而,我怀疑您想要某种包含这些凭据的 model 对象,以便其他组件可以在需要时访问它们。您的登录表单是暂时的,您将来可能有其他登录方式(例如,您可能有网络服务或类似服务)。我意识到这可能是想得太远了,但你明白了。

然后传递用户名/密码的最简单方法是将它们作为 2 个参数传递,例如

db.retrieveAcademic(username, password);

并在方法中调用PreparedStatement.setString() 以获取适当的字段。

(您可能希望将 usernamepassword 字段包装到单独的对象 Credentials 或类似的对象中,但这是以后再说)

【讨论】:

  • 我没有从retrieve Academic 中传递用户名和密码,而是想从loginform 中获取存储的用户名和密码变量到retrieveAcademic() 中以执行语句。给定 atm null,因此无法访问该变量。
  • @MuminAli。你不应该像你正在做的那样去做。登录框架应仅在登录期间存在。之后,它应该启动 GUI 并将凭据传递给启动的 GUI。
  • 所以如果我为用户名和密码创建一个 bean 并在 preapreStatement 行中使用 getUsername 会是一个好方法吗?
猜你喜欢
  • 2015-06-03
  • 2019-12-07
  • 1970-01-01
  • 1970-01-01
  • 2012-11-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-07
相关资源
最近更新 更多