我是编程和Java的新手,并且正在使用SQL和UI(Jframes)在JAVA中构建小型应用程序
在用户输入用户名和密码后,在登录框中,我执行一个SQL选择查询以在USER表中搜索该用户。如果查询返回1个单行,则将触发登录按钮事件处理程序,并创建下一帧的对象。
几帧以后,我有一个SQL插入活动,在这里我还必须插入发起插入操作的人(当前登录的用户)的USER_ID。
在一系列框架类之间传递此信息的最佳实践是什么?
我最初的想法是将user_id作为参数传递给对象,以便在每个框架类的构造函数中对其进行设置。但是问题不是我的所有相框都真正需要此数据。仅涉及插入的最后一帧需要用户ID。但是为了到达那个帧,我必须通过所有其他帧。 这似乎不是一个好习惯。
答案 0 :(得分:1)
我想到的第一种可能性是使用java.util.Properties
将应用程序状态存储在属性文件中。该方法将使用单例包装器,假设ApplicationState
用于读取/写入属性文件。该单例类可以从所有框架访问,或者可以在构造函数内部传递此类的实例。
public class ApplicationState {
private static ApplicationState instance = new ApplicationState();
private ApplicationState() { }
public static ApplicationState getInstance( ) { return instance; }
public String read(String key) throws IOException {
try (InputStream input = new FileInputStream("path/to/config.properties")) {
Properties prop = new Properties();
prop.load(input);
return prop.getProperty(key);
}
}
...
}
然后,我意识到一种更简洁的解决方案是使用java.util.prefs.Preferences
API。有关详细信息,请参见Preferences API。
class A {
public void login() {
Preferences prefs = Preferences.userNodeForPackage(com.mycompany.MyClass.class);
prefs.putInt("userId", 11);
...
}
}
class B {
public void insert() {
Preferences prefs = Preferences.userNodeForPackage(com.mycompany.MyClass.class);
int userId = prefs.getInt("userId", 0); // 0 is default identifier
...
}
}
此外,由于您想存储敏感信息,因此加密存储将很有用。有关使用加密的首选项的信息,请参见this文章。