BinthLafeer Ответов: 2

Я не мог понять эту ошибку пожалуйста помогите мне


com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'group,time,lecturer)values('dzzzzzzc','876',null)' at line 1


Что я уже пробовал:

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.*" %>

<%
    if(request.getParameter("submit")!=null)
    {
        String gr = request.getParameter("grp");
        String tym = request.getParameter("time");
        String lec = request.getParameter("lecturer");
        
        Connection con;
        PreparedStatement pst;
        ResultSet rs;
        
        Class.forName("com.mysql.jdbc.Driver");
        con = DriverManager.getConnection("jdbc:mysql://localhost/englishacademy","root","");
        pst=con.prepareStatement("insert into schedule(group,time,lecturer)values(?,?,?)");
        pst.setString(1, gr);
        pst.setString(2, tym);
        pst.setString(3, lec);
        pst.executeUpdate();
        
%>
        
<script>
    alert("Record Added To The Database");
</script>
<%
    }
%>

2 Ответов

Рейтинг:
2

MadMyche

Проблема, с которой вы столкнулись, заключается в том, что вы используете Зарезервированный слова в определении таблицы, поэтому, когда они вызываются в операторе, их нужно будет экранировать.

Большинство IDE для языка выделяют зарезервированные/специальные/ключевые слова, и мое общее правило состоит в том, чтобы использовать разные имена, когда цвета меняются. Об этом можно судить даже в Редакторе CodeProject

insert into schedule(group,time,lecturer)values(...
Разные серверы БД используют разные символы для экранирования зарезервированных слов; я полагаю, что MariaDB использует обратную галочку, чтобы экранировать их, поэтому ваш запрос будет выглядеть следующим образом
insert into schedule(`group`,`time`,lecturer)values(...
Вот список слов, которые MariaDB считает особенными:
Зарезервированные Слова - База Знаний MariaDB[^]


0x01AA

+5 за то, что описал его гораздо точнее, чем я :-)

MadMyche

Спасибо

Рейтинг:
18

0x01AA

group это зарезервированное имя, поэтому оно должно быть заключено в кавычки при использовании его в качестве имени столбца. Лучше выбрать другое название для столбца.

Смотрите здесь для получения дополнительной информации: Зарезервированные Слова - База Знаний MariaDB[^]

Примечание: time в основном он также зарезервирован, но будет обработан как исключение по историческим причинам.


MadMyche

+5 за то, что печатаешь быстрее меня

BinthLafeer

спасибо, теперь он работает.

Maciej Los

5ed!

0x01AA

Спасибо Мацей