具有重复值的客户端服务器 Java 应用程序的问题

问题描述

我的 Java 客户端服务器应用程序有问题。我的登录无效。我使用的是 MysqL 数据库

MysqL 数据库中的表如下所示: DB

现在我的 Java 应用程序中有函数了。 从客户端它看起来像:

我从 TextFields 获取价值:

 String userName = ftUser.getText();
 String password = String.valueOf(ftPassword.getpassword());

之后我将它发送到另一个具有可序列化的类

 public int login(String login,String password) throws IOException,ClassNotFoundException {

    LoginData data = new LoginData();

    data.setLogin(login);
    data.setPassword(password);
    data.setType("login");

    outer = new ObjectOutputStream(socket.getoutputStream());
    outer.writeObject(data);

    writer = new ObjectInputStream(socket.getInputStream());
    LoginData received = (LoginData) writer.readobject();

    System.out.println("Serwer says: " + received.getType());

    if(received.getType().equals("ok admin"))
        return 2;
    else if (received.getType().equals("ok user"))
        return 1;
    else
        return 0;

}

函数向服务器端发送登录信息。 服务器功能如下:

 @Override
public void run() {
    try {
        while(true) {

            writer = new ObjectInputStream(client.getInputStream());
            LoginData received = (LoginData) writer.readobject();

                if(received.getType().equals("login")) {
                    setLogin(received.getLogin());
                    setPassword(received.getpassword());

                    System.out.println(getLogin()+getpassword());

                    loginHandler();
}

现在程序从服务器端调用函数 LoginHandler()

private void loginHandler() throws IOException,sqlException {
    ObjectOutput outer = new ObjectOutputStream(client.getoutputStream());
    LoginData ld = new LoginData();
    stmt = db.connect().createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
    stmt.executeUpdate("USE biblioteka");
    String st = ("SELECT * FROM users WHERE login='"+getLogin()+"' AND haslo='"+getpassword()+"'");

    rs = stmt.executeQuery(st);

    if (rs.next()) {
            System.out.println("Witamy w bazie!");
            System.out.println("Udane logowanie: " + getLogin());
            String admin = rs.getString("admin");
            if (admin.equals("1")) {
                ld.setType("ok admin");
                outer.writeObject(ld);

            } else if (admin.equals("0")) {
                ld.setType("ok user");
                outer.writeObject(ld);
                outer.flush();


            }
                db.closeDatabase();

    } else {
        ld.setType("error login");
        outer.writeObject(ld);
        System.out.println(ld);
        System.err.println("Error Login " + getLogin());
        db.closeDatabase();
    }

我的管理员登录有问题,因为用户工作正常。 当我尝试登录我的管理员时,我得到了双倍的价值。 我不明白为什么会这样,因为用户运行良好

这是我的控制台日志:

Serwer says: ok user

Serwer says: ok admin
Serwer says: ok admin

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)