如何从MySql数据库中获取所有用户并放入arraylist

时间:2019-01-06 11:47:06

标签: java mysql database arraylist jdbc

我正在创建一个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;
}
}

2 个答案:

答案 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

现在您有了相应的用户对象。

希望这会有所帮助。