Ошибка с чтением данных на сервере

297
29 августа 2021, 02:00

При чтение с бд выдает ошибку. Данные приходят в формате json.

public class ClientThread implements Runnable {
private Scanner scanner;
private Socket socket;
private DB db;
public ClientThread(Socket socket, DB db) {
    this.socket = socket;
    this.db = db;
}
@Override
public void run() {
    try {
        scanner = new Scanner(socket.getInputStream());
        while (!socket.isClosed()) {
            while (scanner.hasNextLine()) {
                String jsonUser = scanner.nextLine();
                Gson gson = new Gson();
                User user = gson.fromJson(jsonUser, User.class);
                System.out.println(jsonUser);
                db.addUser(user);
                Thread.sleep(2000);
                String a = db.selectUser(user); // Тут ошибка
                if (a.isEmpty()) {
                    db.addUser(user);
                }
                if (!a.isEmpty()) {
                    System.out.println("1");
                }
                break;
            }
            socket.close();
        }
        System.out.println("socket is closed");
    } catch (IOException | InterruptedException e) {
        e.printStackTrace();
    }
}

}

public class ListenThread implements Runnable {
private DB db;
public ListenThread() {
    db = new DB();
}
@Override
public void run() {
    try {
        ServerSocket serverSocket = new ServerSocket(6789);
        while (true) {//
            System.out.println("wait for client");
            Socket socket = serverSocket.accept();
            System.out.println("client connected");
            ClientThread clientThread = new ClientThread(socket, db);
            Thread thread = new Thread(clientThread);
            thread.start();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
}

}

public class User {
private String login;
private String password;
private int score;
public User(String login, String password, int score) {
    this.login = login;
    this.password = password;
    this.score = score;
}
public String getLogin() {
    return login;
}
public void setLogin(String login) {
    this.login = login;
}
public String getPassword() {
    return password;
}
public void setPassword(String password) {
    this.password = password;
}
public int getScore() {
    return score;
}
public void setScore(int score) {
    this.score = score;
}
@Override
public String toString() {
    return "User{" +
            "login='" + login + '\'' +
            ", password='" + password + '\'' +
            ", score=" + score +
            '}';
}
@Override
public boolean equals(Object o) {
    if (this == o) return true;
    if (o == null || getClass() != o.getClass()) return false;
    User user = (User) o;
    return score == user.score &&
            Objects.equals(login, user.login) &&
            Objects.equals(password, user.password);
}
@Override
public int hashCode() {
    return Objects.hash(login, password, score);
}

}

public class DB {
private final String DB_CONNECTION = "jdbc:postgresql://localhost:5432/diplom";
private final String DB_USER = "postgres";
private final String DB_PASSWORD = "1";
private Connection connection;
private Boolean found;
public DB() {
    try {
        connection = DriverManager.getConnection(DB_CONNECTION, DB_USER, DB_PASSWORD);
    } catch (SQLException e) {
        e.printStackTrace();
    }
}
public void addUser(User user) {
    try (Statement statement = connection.createStatement()) {
        statement.executeUpdate(
                "INSERT INTO users(login, password,score)" +
                        "VALUES ('"
                        + user.getLogin() + "', '"
                        + user.getPassword() + "', '"
                        + user.getScore() + "')"
        );
    } catch (SQLException e) {
        e.printStackTrace();
        //  "')"
    }
}
public void updateUser(User user) {
    try (Statement statement = connection.createStatement()) {
        statement.executeUpdate(
                "UPDATE users  SET score = '"
                        + user.getScore() + "'WHERE login ='" + user.getLogin() + "';"
        );
    } catch (SQLException e) {
        e.printStackTrace();
        //  "')"
    }
}
public String selectUser(User user) {
    try (Statement statement = connection.createStatement()) {
        statement.executeUpdate(
                "SELECT id, login, password, score " +
                        "from users where login = '" + user.getLogin() + "' and  password = '" + user.getPassword() + "';"
        );
    } catch (SQLException e) {
        e.printStackTrace();
        //  "')"
    }
    return null;
}

}

DB

CREATE TABLE users(id SERIAL PRIMARY KEY, login VARCHAR(30) UNIQUE, password VARCHAR(30), score INTEGER);

Ошибка

org.postgresql.util.PSQLException: Результат возвращён когда его не ожидалось.
at 
org.postgresql.jdbc.PgStatement.getNoResultUpdateCount(PgStatement.java:256)
    at org.postgresql.jdbc.PgStatement.executeUpdate(PgStatement.java:247)
    at com.comany.clients.DB.selectUser(DB.java:52)
    at com.comany.clients.ClientThread.run(ClientThread.java:31)
    at java.base/java.lang.Thread.run(Thread.java:835)
Exception in thread "Thread-2" java.lang.NullPointerException
    at com.comany.clients.ClientThread.run(ClientThread.java:32)
    at java.base/java.lang.Thread.run(Thread.java:835)

Пример json запроса

{"login":"Test","password":"Test","score":0}
READ ALSO
Как считывать файлы больших размеров?

Как считывать файлы больших размеров?

При запуске программы с файлом, например, 1Гб вылетает ошибка

156
java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver

На одном проекте подключенный драйвер работаетНа другом - нет - выводит эту ошибку

217
В Cordova не работает AJAX

В Cordova не работает AJAX

Делаю приложение на Cordova и мне нужно работать с БДВ браузере всё работает хорошо, но в эмуляторе отказывается

129