Сброс соединения при невозможности записи в MySQL - PullRequest
0 голосов
/ 17 апреля 2020

У меня есть этот метод здесь - всякий раз, когда я комментирую секцию MySQL, от String query до pst.close() - код работает нормально. Однако, если я этого не сделаю, то это даст мне ошибку Connection Reset. Я использую сокет между клиентом и сервером для вашей информации. Как бы я это исправить? Или это проблема, которая не имеет отношения к MySQL?

public static String doAddUser(String username, String password, String email, String fullname) throws SQLException {
    String returnStatement = "";
    Connection connection = establishConnection();

    if(email.isEmpty() || password.isEmpty()) {
        returnStatement = "CreateFailure: Some fields are left blank. Please note that all fields are required. Please try again";
    }

    else {

        String query = "insert into test(`username`, `password`, `email`, `fullname`) values (?,?,?,?)";
        PreparedStatement pst = connection.prepareStatement(query);
        pst.setString(1, username);
        pst.setString(2, password);
        pst.setString(3, email);
        pst.setString(4, fullname);
        pst.executeUpdate();
        pst.close();
        returnStatement = "CreateSuccess: You are now registered!";
    }
    return returnStatement;
}

Ответы [ 3 ]

1 голос
/ 17 апреля 2020

Возможно, у вас должно быть connection.close() до возврата.

Или, если вы находитесь в относительно новой версии JRE, вы могли бы достичь того же с try-with-resource.

* 1006. *

Это обеспечит закрытие вашего соединения после завершения блока try. Однако для этого потребуется, чтобы класс Connection реализовал интерфейс AutoCloseable.

0 голосов
/ 17 апреля 2020

Вот что работает для меня, как предложено @Binaek Sarkar (я немного его изменил):

public static String doAddUser(String username, String password, String email, String fullname) throws SQLException {
    String returnStatement = "";
    try {
        if(email.isEmpty() || password.isEmpty()) {
            returnStatement = "CreateFailure: Some fields are left blank. Please note that all fields are required. Please try again";
            }
        else {
            Connection connection = null;
            connection = MySQLConnection.dbConnector();
            String query = "INSERT INTO `test`(`username`, `password`, `email`, `fullname`) VALUES (?,?,?,?)";
            PreparedStatement pst = connection.prepareStatement(query);
            pst.setString(1, username);
            pst.setString(2, password);
            pst.setString(3, email);
            pst.setString(4, fullname);
            pst.executeUpdate();
            pst.close();

            returnStatement = "CreateSuccess: You are now registered! You will redirected to the login page now. ";
        }
    }catch(Exception e) {returnStatement = "Invalid. Please try again!";}

    return returnStatement;
}
0 голосов
/ 17 апреля 2020

Я думаю, что соединение устанавливается и не закрывается, возможно, проблема в этом.

...