我正在创建一个Java应用程序,它将允许用户注册,登录和更新其详细信息。数据存储在已经成功连接到我的应用程序的MySQL数据库中。
我希望能够获取用户的所有数据,这些数据将用于创建用户对象并创建所有用户的数组列表,类型为“ user”。
我想知道的是ID是否对“用户”对象具有良好的属性,因为我有用户名和用户名(这对用户是唯一的)。
当用户登录到其帐户时,用户列表应将所有用户都包含在阵列列表中,并定位到已登录的用户。我不知道该怎么办。
到目前为止,我已经上传了当前代码:
public class UserAccountList {
private static UserAccountList instance;
private ArrayList<user> userList;
user newUser = null;
int currentUser;
protected UserAccountList() throws IOException {
this.userList = new ArrayList<>();
readDatabase();
}
public static void main(String[] args) throws IOException{
ArrayList<user> userList1 = new UserAccountList().getUserList();
for(int i=0;i<userList1.size();i++){
System.out.println(userList1.get(i).getUsername());
}
}
public ArrayList getUserList() throws IOException {
return this.userList;
}
public static UserAccountList getInstance() throws IOException {
if (instance == null) {
instance = new UserAccountList();
}
return instance;
}
private void readDatabase() throws IOException {
PreparedStatement ps;
ResultSet rs;
String query = "SELECT * FROM `user`" ;
try{
ps = MyConnection.getConnection().prepareStatement(query);
rs = ps.executeQuery();
while(rs.next() != false){
String uname = rs.getString("username");
String pass = rs.getString("password");
String fname = rs.getString("firstname");
String lname = rs.getString("lastname");
String email = rs.getString("email");
String uni = rs.getString("university");
String course = rs.getString("course");
user newUser = new user(fname, lname, uname, pass, email, uni, course);
addUser(newUser);
}
}
catch (SQLException ex) {
Logger.getLogger(FXMLRegistrationController.class.getName()).log(Level.SEVERE, null, ex);
}
}
public void addUser(user newUser){
userList.add(newUser);
return;
}
}
答案 0 :(得分:0)
我的建议是尝试
while(rs.next()){
String uname = rs.getString(1);
String pass = rs.getString(2);
String fname = rs.getString(3);
String lname = rs.getString(4); //Presuming they are in this order
String email = rs.getString(5);
String uni = rs.getString(6);
String course = rs.getString(7);
user newUser = new user(fname, lname, uname, pass, email, uni, course);
addUser(newUser);
}
从我的角度来看,拥有ID总是一个好主意,但我认为在您的情况下没有必要。至于定位用户,我假设它是currentUser
变量。通过验证并获得登录用户后。使用userList.indexOf(loggedInUser)
答案 1 :(得分:0)
您应该简单地遍历名为user
的{{1}}列表,并将每个用户对象的username属性与当前登录用户的用户名进行比较:
userList
但是
如果我是我,我会将user currentLoggedInUser = null;
String username = "username of current logged in user";// you have this, right?
for(user u: userList){
if(username.equals()){
currentLoggedInUser = u;
break;
}
}
对象存储在user
中而不是HashMap<String,user>
中:
ArrayList<user>
因此,当用户登录并尝试更改其某些属性时,只需从public class UserAccountList {
//private ArrayList<user> userList;
Map<String,user> users = new HashMap<String,user>(); // instead of above userList
...
public void addUser(user newUser){
users.put(newUser.getUsername, newUser);// key is username, value is the user object
}
}
Map集合中获取其对象即可,而无需遍历整个列表:
users
现在您有了相应的用户对象。
希望这会有所帮助。