Почему я получаю исключение java.sql.SQLException рядом с «@» в моей базе данных JDBC SQLite?

#java #sqlite #jdbc #sql-update

#java #sqlite #jdbc #sql-обновление

Вопрос:

Я пытаюсь обновить значения в моей базе данных SQLite. Мой код выглядит следующим образом:

                    for(Cookie ck:cookie) {
                        if (ck.getName().equals("email")) {
                            s=ck.getValue();
                            System.out.println(s);
                            for(Cookie ce:cookie) {
                                if(ce.getName().equals("name")) {
                                    System.out.println(ce.getValue());
                                    i=PS.executeUpdate("UPDATE Details " "SET name=" ce.getValue() " WHERE email=" s);
                                }
                                else if (ce.getName().equals("age")) {
                                    System.out.println(ce.getValue());
                                    i=PS.executeUpdate("UPDATE Details " "SET age=" ce.getValue() " WHERE email=" s);
                                }
                            }
                            break;
                        }
                        
                    }
  

Здесь я пытаюсь получить имя, возраст и адрес электронной почты с помощью Cookies и обновлять эти значения в базе данных. Затем, когда я ввожу входные данные, я получаю эту ошибку (предположим, электронное письмо: abc@gmail.com ):

 java.sql.SQLException: near "@gmail": syntax error
    at org.sqlite.NativeDB.throwex(NativeDB.java:210)
    at org.sqlite.NativeDB._exec(Native Method)
    at org.sqlite.Stmt.executeUpdate(Stmt.java:152)
    at abhishek.Modify.doGet(Modify.java:44)...
  

Комментарии:

1. Вы не должны объединять значения в строку запроса. Вместо этого параметризуйте свой оператор и используйте подготовленный оператор, задайте значения для объекта statement, а затем выполните.

Ответ №1:

Вы должны добавить одинарные кавычки вокруг строк в sql.

 i=PS.executeUpdate("UPDATE Details " "SET name='" ce.getValue() "' WHERE email='" s "'");
...
i=PS.executeUpdate("UPDATE Details " "SET age=" ce.getValue() " WHERE email='" s "'")
  

Кстати, узнайте о подготовленных операторах для предотвращения sql-инъекции