Во всей сети существует несколько способов решения проблемы У вас есть ошибка в синтаксисе SQL; обратитесь к руководству, соответствующему вашему серверу MySQL

1. Воспроизведите ошибку


Сегодня при отладке low-code интерфейса неожиданно сообщается следующая ошибка:

вставьте сюда описание изображения

т.е. You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc,name,is_deleted ) VALUES('测试哈','测试哈','测试项目',1 )' at line 11_

Поэтому проверьте подробную информацию об ошибках, сообщаемую консолью, как показано на следующем рисунке:

java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'desc,name,is_deleted ) VALUES('测试哈','测试哈','测试项目',1 )' at line 1
	at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:120)
	at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:953)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1092)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1040)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1348)
	at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1025)
	at com.alibaba.druid.pool.DruidPooledPreparedStatement.executeUpdate(DruidPooledPreparedStatement.java:241)
	at com.test.AppModelPageService.addData(AppModelPageService.java:904)
	at com.test.AppModelPageService$$FastClassBySpringCGLIB$$81597048.invoke(<generated>)
	at org.springframework.cglib.proxy.MethodProxy.invoke(MethodProxy.java:218)
	at org.springframework.aop.framework.CglibAopProxy$DynamicAdvisedInterceptor.intercept(CglibAopProxy.java:688)
	at com.test.AppModelPageService$$EnhancerBySpringCGLIB$$40f27572.addData(<generated>)
	at com.sugon.cloud.lowcode.controller.AppModelPageController.AddData(AppModelPageController.java:125)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.lang.reflect.Method.invoke(Method.java:498)
	at org.springframework.web.method.support.InvocableHandlerMethod.doInvoke(InvocableHandlerMethod.java:197)
	......

2. Ошибки анализа


Видно java.sql.SQLSyntaxErrorException, что это SQLграмматическая ошибка.

Найдите распечатанный SQLжурнал, как показано на следующем рисунке:

вставьте сюда описание изображения

MySQLСкопируйте оператор в красном поле в MySQLконсоль для выполнения, как показано на следующем рисунке:

вставьте сюда описание изображения

Я почти уверен insert into project(remark,desc,name,is_deleted ) VALUES('测试哈','测试哈','测试项目',1 );, что MySQLв этом утверждении нет синтаксической ошибки.

Это может только учитывать наличие конфликтующих MySQL关键字полей в инструкции.

Присмотритесь, descэто MySQLключевое слово, которое указывает порядок убывания, как показано в следующем коде:

select * from product order by price desc; 

3. Исправить ошибки

Из вышеприведенного анализа видно, что ключевые слова в insert into project(remark,desc,name,is_deleted ) VALUES('测试哈','测试哈','测试项目',1 );моем descоператоре SQL конфликтуют.MySQLdesc

Поэтому я могу изменить его двумя способами:

  1. метод первый

Измените мое descполе на другие MySQLполя, которые не конфликтуют с ключевыми словами, например noteи т. д.

  1. Способ второй

Добавьте обратные кавычки (`) к MySQLоператору выше , как показано в следующем коде:desc

mysql> insert into project(remark,`desc`,name,is_deleted ) VALUES('测试哈','测试哈','测试项目',1 );
Query OK, 1 row affected (0.01 sec)

вставьте сюда описание изображения

Поэтому в нашей фактической разработке лучше всего добавлять обратные кавычки (`) к таким полям, как добавление, изменение и запрос.

Избегайте MySQLконфликтов ключевых слов с вашими собственными, тем самым уменьшая ненужные проблемы.

4. Другие способы устранения этой ошибки


Моя ошибка в том, что в insertоператоре есть MySQLполе, которое конфликтует с ключевым словом, и проблему можно решить, добавив обратно одинарные кавычки в конфликтующее поле.

Если ваша ошибка не вызвана этой причиной, вы можете обратиться к следующим решениям.

  1. Одинарные кавычки и обратные одинарные кавычки неразличимы

javaОдинарные кавычки (') используются для значений ключей, а одинарные кавычки (`) используются для имен столбцов, например

ed.insertData("insert into information(`nowtime`,`data`) values(current_time,'A');");

insertDataОн отвечает за выполнение этого SQLоператора, и он, наконец, возвращает количество затронутых элементов, так что не беспокойтесь об этом.

в:

  • Имена столбцов nowtimeи data(здесь используйте обратные одинарные кавычки)

  • Значение, записанное в базу данных, представляет собой current_timeсимвол амперсанда A(здесь одинарные кавычки).

  1. Проверьте, является ли true синтаксической ошибкой

Обычно это можно увидеть.

  1. Проверьте, не забывает ли оператор пробелы

Сообщается о следующей ошибке:

int result = ed.insertData("insert "+"into test"
    			+ "values(1) ");

Несложно объединить код в одно предложение и выполнить его, как показано ниже:

int result = ed.insertData("insert into test values(1) ");

Между первым предложением testи последующим нет пробела values, поэтому, естественно, будет сообщено об ошибке.

Читатели должны обратить внимание, не забыли ли вы еще и пробел, эта ошибка часто возникает при смене строк.

SQLПоэтому лучше писать короткие предложения одним предложением, чтобы снизить bugэффективность производства.

Supongo que te gusta

Origin blog.csdn.net/lvoelife/article/details/130108739
Recomendado
Clasificación