Как получить всех пользователей из базы данных MySql и поместить в arraylist - PullRequest
0 голосов
/ 06 января 2019

Я создаю Java-приложение, которое позволит пользователям регистрироваться, входить в систему и обновлять свои данные. Данные хранятся в базе данных MySQL, которая уже успешно подключена к моему приложению.

Я хотел бы иметь возможность получить все данные пользователя, которые будут использоваться для создания объекта пользователя и создания списка массивов всех пользователей, который будет иметь тип «пользователь».

Я хотел бы знать, является ли 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 голосов
/ 06 января 2019

Вы должны просто перебрать свой список user с именем userList и сравнить свойство username каждого пользовательского объекта с именем текущего пользователя, вошедшего в систему:

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

Таким образом, когда пользователь вошел в систему и попытался изменить некоторые его свойства, вы можете получить его объект из коллекции карт users, просто не повторяя весь список:

String username = "username of current logged in user";
user loggedInUser = users.get(username);

и теперь у вас есть соответствующий объект пользователя.

Надеюсь, это будет полезно.

0 голосов
/ 06 января 2019

Я предлагаю попробовать

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)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...