首页 > 解决方案 > 如何从 MySql 数据库中获取所有用户并放入 arraylist

问题描述

我正在创建一个 java 应用程序,它允许用户注册、登录和更新他们的详细信息。数据存储在已成功连接到我的应用程序的 MySQL 数据库中。

我希望能够获取用户的所有数据,这些数据将用于创建用户对象并制作所有用户的数组列表,其类型为“user”。

我想知道的是,ID 是否是“用户”对象的一个​​很好的属性,因为我有他们的名字和用户名(这对用户来说是唯一的)。

当用户登录到他们的帐户时,用户列表应该包含 arraylist 中的所有用户并定位到登录用户。我不知道该怎么做。

到目前为止,我已经上传了我当前的代码:

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;
}
}

标签: javamysqldatabasearraylistjdbc

解决方案


我的建议是尝试

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)


推荐阅读