如何保存从方法中获取的变量以供以后在Java中使用?

时间:2015-03-28 22:54:03

标签: java sql variables

我有3个班级,Main,Pin和Employee。 (将来要添加的课程更多)

Main类运行一个程序,提示用户输入Pin类中方法的密码。密码使用SQL发送到数据库,以便从Employee和Pin类中的方法进行验证。如果密码匹配,则返回该员工的ID。

我遇到的问题是保存ID。我检索了ID,但我希望能够在程序的其余部分使用此ID。我想将它保存在Employee类中,但它是从Pin类的方法返回的。我如何能够保存这个ID以供Employee类或任何类使用?

2 个答案:

答案 0 :(得分:1)

嗯,如果我理解你的话,你可能会想要像Employee和Pin这样的东西吗?

Employee e = ...

e.setPin(pin);

或者问题是,您不知道如何为Employee分配特定的引脚,以便在下次运行应用程序时仍将其分配给Employee?

更新:收到更多信息后:您需要为程序创建应用程序上下文。由于它似乎是一次只有一个用户的独立应用程序,因此在某些类中这可能是一个静态字段。

如果应用程序是多用户应用程序,则每个用户的上下文需要是静态的。

如果应用程序是Web应用程序,那么您的应用程序范围是Session,它将在注销期间终止。 (这实际上并不精确,因为会话是会话范围,应用程序范围实际上是应用程序的上下文。但在您的情况下,引脚是会话范围的。)

独立/单用户应用程序的示例:

public class ApplicationContext {

    static ApplicationContext CTX;
    public static ApplicationContext get() {
        if( CTX == null ) {
            CTX = new ApplicationContext();
        }
        return CTX;
    }

    private Pin pin;
    public Pin getPin() { return pin; }
    public void setPin(Pin pin) { this.pin = pin; }

    // ... add more stuff here ...

    public void logout() {
        CTX = null;
    }
}

答案 1 :(得分:0)

您需要的是所谓的应用程序范围对象的概念。 有各种库可以与JavaEE一起使用,但我假设您正在使用Java SE。 DeltaSpike的apache允许在Java SE中执行这样的作用域bean。见an example。像这样,您可以创建一个@ApplicationScoped bean,您可以在其中存储应用程序中的值。

请注意,还有其他可能的范围,例如SessionScoped(HTTP),WindowsScoped(BrowserWindow)等。

此示例将指向正确的方向,但可能有更好的方法,而不是在您的情况下使用作用域。