Поскольку код выглядит нормально, это может быть многопользовательской проблемой.
Сначала я бы проверил, что строка 56 DBHandler действительно является executeUpdate.
DBHandler.doPost(DBHandler.java:56)
Почему-то я сомневаюсь в этом.Может быть, развертывание пошло не так или что-то в этом роде.
Если DBHandler или другие данные будут ошибочно представлять собой поле сервлета, то сервлет не имеет состояния и два doPosts / doGets могут "поделиться "тем же полем, перезаписать его и тому подобное.
Это также может произойти, когда показанный код разделен в источнике, а поток управления позволяет перезаписать поле, скажем, в doGet или сервисе.
Нет полей.
После добавления всего кода
К сожалению, только незначительные моменты:
// Not needed nowadays: Class.forName(JDBC_DRIVER);
try (Connection conn = DriverManager.getConnection(DB_URL,USER,PASS);
PreparedStatement st = conn.prepareStatement(
"select vcode from vendor_db where vcode = ?")) {
st.setString(f.getCode());
try (ResultSet rs = st.executeQuery()) {
if (rs.next()) {
userExists = true;
}
}
if (userExists) {
f.setErrors("code",
"Duplicate user: Try a different vendor code");
getServletConfig().getServletContext()
.getRequestDispatcher("/forms/retry.jsp")
.forward(request, response);
}
else {
String sql= "insert into vendor_db"
+ "(vcode,vname,vmob,vemail,vpass,gst_no)"
+ "values(?,?,?,?,?,?)";
try (PreparedStatement prep = conn.prepareStatement(sql)) {
prep.setString(1, f.getCode());
prep.setString(2, f.getName());
prep.setString(3, f.getPhone());
prep.setString(4, f.getEmail());
prep.setString(5, f.getPass());
prep.setString(6, f.getGst_no());
int i = prep.executeUpdate();
// Not needed here: prep.clearParameters();
if (i != 0) {
getServletConfig().getServletContext()
.getRequestDispatcher("/forms/login.jsp")
.forward(request, response);
}
else {
pw.println("Not entered in database");
}
}
}
}
catch (Exception e)
{
log("An error happened", e);
e.printStackTrace();
}
См. java.sql.SQLException: количество столбцов не совпадает со значением в строке 1 для той же ошибки.
Я думаю, что приложениекак-то не перераспределяется на веб-сервере.
at DBHandler.doPost(DBHandler.java:56)
Это должно быть int i = prep.executeUpdate();
Указывает на строку 56 файла DBHandler.java.Добавьте пару пустых строк, чтобы узнать, изменится ли число.
6 Вопросительные знаки (без кавычек - хорошо), 6 имен столбцов, 6 установленных параметров.