Почему мой оператор JDBC не обновляет базу данных?

#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 " , оно должно быть заключено в одинарные кавычки), и это упрощает опечатку, на которую указал Йоаким. Пожалуйста, ознакомьтесь с подготовленными операторами и параметрируйте свой оператор.