#java #sqlite #jdbc #sql-update
#java #sqlite #jdbc #sql-обновление
Вопрос:
Я пытаюсь обновить записи в моей базе данных SQL. В этом случае я пытаюсь обновить запись, извлекая идентификатор электронной почты пользователя из JSP
формы.
Мой фрагмент кода:
int y=0;
PrintWriter pw=response.getWriter();
String st=request.getParameter("name");
String s=request.getParameter("email");
String p=request.getParameter("age");
Connection c=null;
if (st!=null || s!=null || p!=null) {
if (c==null) {
try {
Class.forName("org.sqlite.JDBC");
c=DriverManager.getConnection("jdbc:sqlite:D:\storage.db");
Statement PS=c.createStatement();
int i=PS.executeUpdate("UPDATE Details SET name=" st ", age=" p "WHERE email=" s);
if (i==0)
pw.println("Can't be updated, record isn't available in our database");
else
pw.println("Updated successfully");
PS.close();
c.close();
}
catch (ClassNotFoundException | SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
Но, как ни странно, ни одна запись не обновляется. Кроме того, в консоли не отображается никаких ошибок. Почему это происходит? Буду признателен за любую помощь.
РЕДАКТИРОВАТЬ: я пытался работать с обоими PreparedStatement
и. Statement
Ничего не работает.
Комментарии:
1. Это печать в вашей консоли IDE
Entries updated successully!
?2. Нет, он даже не показывает
y
счетчик, когда я пытаюсь его распечатать.3. Затем вам нужно убедиться, что вы можете находить записи при вводе
SELECT
данных4.
age=" p "WHERE email="
мне кажется, что между возрастом и словом WHERE не будет пробела, что-то вроде age= 25WHERE email =» . Если это так, то решение состоит в том, чтобы работать с подготовленным оператором, чтобы избежать подобных ошибок.5. Вам действительно не следует объединять значения в строку запроса, это небезопасно, поскольку делает ваш код уязвимым для SQL-инъекций (что в основном и является проблемой
name=" st "
, оно должно быть заключено в одинарные кавычки), и это упрощает опечатку, на которую указал Йоаким. Пожалуйста, ознакомьтесь с подготовленными операторами и параметрируйте свой оператор.