java.sql.SQLException: не может выполнить executeUpdate () или executeLargeUpdate () для SELECT - PullRequest
0 голосов
/ 22 февраля 2019

Я пытаюсь зарегистрировать страницу, если электронное письмо уже выходит, должно появиться предупреждающее сообщение, потому что ниже приведена некоторая часть кода, я использую executeQuery для запроса выбора, но все равно получаю ошибку:

java.sql.SQLException: Невозможно выполнить executeUpdate () или executeLargeUpdate () для SELECTs

код Java:

Class.forName("com.mysql.jdbc.Driver");
            Connection cn=DriverManager.getConnection("jdbc:mysql://localhost:3306/xxxx", "root","root");
            PreparedStatement ps=cn.prepareStatement("select * from Register where email=?");
            ps.setString(1, email);
            ResultSet rs=ps.executeQuery();

            if(rs.next())
            {
                out.println("<script type=\"text/javascript\">");
                   out.println("alert('Email already Exists Please Try with New Email');");
                   out.println("location='index.html';");
                   out.println("</script>");
            }
            else{

                   PreparedStatement ps1 = cn.prepareStatement("insert into Register values(?,?,?,?,?)");
                                ps1.setString(1, name);
                                ps1.setString(2, email);
                                ps1.setString(3, mobile);
                                ps1.setString(4, password);
                                ps1.setString(5, conform_password);

                                int i = ps.executeUpdate();
                                if (i != 0) {
                                    response.sendRedirect("index.html");
                                } else {
                                    out.println("Some Thing went wrong. Try Again...");
                                }

            }
        }

1 Ответ

0 голосов
/ 22 февраля 2019

Я предполагаю, что проблема связана с тем, что вы не закрыли первый оператор, использованный для выбора, прежде чем пытаться создать другой оператор для вставки.Но есть лучший способ реализовать вашу логику, используя единственную вставку:

String sql = "INSERT INTO Register (name, email, mobile, password, confirm_password) ";
sql += "SELECT ?, ?, ?, ?, ? ";
sql += "WHERE NOT EXISTS (SELECT 1 FROM Register WHERE email = ?)";

PreparedStatement ps = cn.prepareStatement(sql);
ps.setString(1, name);
ps.setString(2, email);
ps.setString(3, mobile);
ps.setString(4, password);
ps.setString(5, conform_password);
ps.setString(6, email);

int i = ps.executeUpdate();
if (i == 0) {
    System.out.println("Email already Exists Please Try with New Email");
}
else {
    response.sendRedirect("index.html");
}

Если предложение существует вышеупомянутой вставки не удается, тогда ничего не должно быть вставлено, и количество строк DML, возвращаемое executeUpdate() должно быть ноль.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...