01/10/2018, 10:40

Java-Swing Làm ứng dụng cho máy ATM

  • Mình đang có 2 bảng USERS (id, username, password) ; MONEY(id, amount, numb): id int primary key

  • Mình đã tạo xong swingLogin (nhập user, pass) xong thì hiện ra Button “xem số dư” …

  • Mình đã tạo xong Hàm CheckAmount " select amount from MONEY where id = ? " (nhập id vào cho nó select)

  • Giờ khi mình viết Hàm GetId lấy id từ USERS

  • Để khi Action Button "xem số dư " mình gọi hàm GetId để nhập vào Hàm CheckAmount

  • “số dư của bạn là” + CheckAmount(GetId) +“VND” ;

  • Vậy viết cái Hàm GetId kiểu gì vậy các bác, mình nghĩ mãi mà chưa ra đc ???

Dark.Hades viết 12:43 ngày 01/10/2018

Khi đăng nhập xong sao bạn không trả về id user luôn?

Phan Bá Hải viết 12:53 ngày 01/10/2018

Nếu username của bác không sử dụng dấu tiếng Việt thì có thể viết hàm getId(String username) như sau

public int getId(String username) {
    PreparedStatement ps = connection.prepareStatement("SELECT ID FROM USERS WHERE USERNAME LIKE ?");
    ps.setString(1, username);
    ResultSet rs = ps.executeQuery();
    return (rs.next()) ? rs.getInt(1) : 0; // 0 tức không tìm thấy id để khỏi bị NullPointerException
}

Hoặc sau khi đăng nhập thành công thì get ra đối tượng Users luôn rồi lưu vào biến toàn cục của class xử lý. Logout thì reset biến đó đi

private User user; // đối tượng user gồm id, username và password
public void login(String username, String password) {
    // xử lý login
    // Nếu login thành công
    user = new User(id, username, password);
}
Đinh Tùng viết 12:40 ngày 01/10/2018

Đúng rồi đó mình cũng làm 2 cách như 2 bác đó.
Nhưng mà ở Class CheckAmount khi mình gọi ra GetId(username) hoặc CheckLogin(username,password)
thì đều phải truyền username or password vào.
VD : CheckAmount(GetId(username));
username này thì mình lấy ở đâu.
Vì mình viết mỗi Action Button một Class riêng nên username và password chỉ nhập ở CheckLogin
Còn những Class kia mình ko biết gọi nó ra kiểu gì

Tynk Huynk viết 12:50 ngày 01/10/2018

Bạn có biết khái niệm Singleton không ? Đó là class mà chỉ có duy nhất 1 object được khởi tạo, và được sử dụng bởi các object khác trong 1 application.

VD:

class CurrentUser(){

    /// Các object khác sẽ truy cập vào CurrentUser dưới này
    public static CurrentUser user;

    private String username;
    private String password;
    
     // set private constructor để ngăn không cho object khác tạo mới CurrentUser bừa bãi
    private CurrentUser(){
    }
    

    public static CurrentUser getInstance(){
         if(user == null){
              user = new CurrentUser();    
         }
         return user;
    }
     
    // getter va setter de thao tac vs username va password
}

Done, nếu kiểm tra user có tồn tại ttrong database thì bắt đầu gọi phương thức getInstance từ class CurrentUser để tạo mới CurrentUser object (nếu như chưa khởi tạo) rồi pass username, password vào object này. Nếu muốn lấy username, password của user hiện tại thì gọi lại object đó từ getInstance() rồi lấy data của nó thôi

Tynk Huynk viết 12:50 ngày 01/10/2018

Tham khảo thêm về Singleton: http://www.oodesign.com/singleton-pattern.html

Đinh Tùng viết 12:48 ngày 01/10/2018

Ok đê mình làm thử xem !!!

Tynk Huynk viết 12:52 ngày 01/10/2018

Mình có edit lại vì có sai sót, bạn có thể xem lại

Bài liên quan
0