java - 具有重复值的客户端服务器 Java 应用程序问题
问题描述
我的 Java 客户端服务器应用程序有问题。我的登录不起作用。我正在使用 MySql 数据库。
Mysql 数据库中的表如下所示: DB
现在我的 Java 应用程序中有功能。从客户端来看,它看起来像:
我从 TextFields 获得价值:
String userName = ftUser.getText();
String password = String.valueOf(ftPassword.getPassword());
之后,我将它发送到另一个类,实现了 Serializable
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
解决方案
推荐阅读
- python - Efficient string matching for multiple patterns
- solana - Solana - 如何获取集群版本
- html - 例外:从 text/html 到 application/pdf 的转换失败 - 从昨天开始
- azure-devops - 更改计算机名称后,DevOps 服务器控制台无法打开 TeamCollections
- ansible - Ansible: ansble playbook 中的按位运算
- html - 对象在反应形式 Angular 中可能为“空”
- c++ - 使用 using 实现纯虚函数
- qt - 在 qml 中的立方体上映射不同大小的图像
- python - django 没有返回 HttpResponse 对象
- javascript - Node.js Busboy 在“完成”事件之前没有触发“文件”事件