java MySQL server version for the right syntax to use near

文章记录了一次因SQL语法错误导致的应用程序异常,具体错误为使用了MySQL关键字'lock'作为字段名。通过修改字段名称,成功解决了该问题。

JDBCExceptionReporter.logExceptions(72) |

 

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 'lock='0', content='1' where id=1' at line 1
[BJXD] ERROR [http-8080-Processor22] AbstractFlushingEventListener.performExecutions(277) | Could not synchronize database state with session
org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update
 at org.hibernate.exception.ErrorCodeConverter.convert(ErrorCodeConverter.java:70)
 at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:181)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:137)
 at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
 at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:394)
 at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)
 at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:642)
 at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:638)
 at com.onexun.zgxq.dao.admin.OrgInfoDaoIMP.editOrgInfo(OrgInfoDaoIMP.java:32)
 at com.onexun.zgxq.action.admin.OrgInfoAction.del(OrgInfoAction.java:78)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:300)
 at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:166)
 at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
 at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
 at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
 at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
 at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
 at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
 at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 at java.lang.Thread.run(Thread.java:595)
Caused by: java.sql.BatchUpdateException: 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 'lock='0', content='1' where id=1' at line 1
 at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:891)
 at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
 at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
 ... 39 more
org.springframework.jdbc.BadSqlGrammarException: Hibernate operation: Could not execute JDBC batch update; bad SQL grammar [update org_info set user_id=?, city_id=?, univercity_id=?, spoken_id=?, org_type=?, name=?, type=?, city_name=?, univercity_name=?, user_name=?, spoken_name=?, spoken_pic=?, join_right=?, member_num=?, score=?, level=?, adversite=?, intro=?, keyword=?, found_time=?, lock=?, content=? where id=?]; nested exception is java.sql.BatchUpdateException: 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 'lock='0', content='1' where id=1' at line 1
Caused by: java.sql.BatchUpdateException: 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 'lock='0', content='1' where id=1' at line 1
 at com.mysql.jdbc.PreparedStatement.executeBatch(PreparedStatement.java:891)
 at org.apache.commons.dbcp.DelegatingStatement.executeBatch(DelegatingStatement.java:294)
 at org.hibernate.jdbc.BatchingBatcher.doExecuteBatch(BatchingBatcher.java:57)
 at org.hibernate.jdbc.AbstractBatcher.executeBatch(AbstractBatcher.java:174)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:226)
 at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:137)
 at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:274)
 at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:27)
 at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:730)
 at org.springframework.orm.hibernate3.HibernateAccessor.flushIfNecessary(HibernateAccessor.java:394)
 at org.springframework.orm.hibernate3.HibernateTemplate.execute(HibernateTemplate.java:367)
 at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:642)
 at org.springframework.orm.hibernate3.HibernateTemplate.update(HibernateTemplate.java:638)
 at com.onexun.zgxq.dao.admin.OrgInfoDaoIMP.editOrgInfo(OrgInfoDaoIMP.java:32)
 at com.onexun.zgxq.action.admin.OrgInfoAction.del(OrgInfoAction.java:78)
 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
 at java.lang.reflect.Method.invoke(Method.java:585)
 at com.opensymphony.xwork.DefaultActionInvocation.invokeAction(DefaultActionInvocation.java:300)
 at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:166)
 at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
 at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
 at com.opensymphony.xwork.interceptor.AroundInterceptor.intercept(AroundInterceptor.java:35)
 at com.opensymphony.xwork.DefaultActionInvocation.invoke(DefaultActionInvocation.java:164)
 at com.opensymphony.xwork.DefaultActionProxy.execute(DefaultActionProxy.java:116)
 at com.opensymphony.webwork.dispatcher.ServletDispatcher.serviceAction(ServletDispatcher.java:272)
 at com.opensymphony.webwork.dispatcher.ServletDispatcher.service(ServletDispatcher.java:237)
 at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
 at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
 at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
 at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
 at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
 at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
 at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
 at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
 at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
 at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
 at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
 at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
 at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
 at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
 at java.lang.Thread.run(Thread.java:595)

 
原因: lock 是Hibernate的关键字 不允许使用
解决方法:  修改字段的名字

本文来自优快云博客,转载请标明出处:http://blog.youkuaiyun.com/xuanlingtao/archive/2007/04/08/1556995.aspx

MySQL 中出现与服务器版本相关的语法错误,尤其是涉及 `numeric` 的使用时,通常表明 SQL 语句中存在不兼容或错误的语法结构。这种错误提示类似于: > 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 'numeric' at line 1 这类问题可能由多种原因引起,包括关键字使用不当、字段定义错误、或与特定 MySQL 版本的兼容性问题。 ### 常见原因与解决方法 1. **关键字冲突或未正确转义** 在某些情况下,`numeric` 可能被误用为列名或表名,而没有使用反引号(`` ` ``)进行转义。MySQL 保留了一些关键字用于内部使用,如果在定义表结构或执行查询时使用了这些关键字而不加转义,就会导致语法错误。例如: ```sql CREATE TABLE example ( id INT PRIMARY KEY, numeric VARCHAR(255) ); ``` 上述语句在某些 MySQL 版本中可能会报错,因为 `numeric` 是保留关键字。正确的写法应为: ```sql CREATE TABLE example ( id INT PRIMARY KEY, `numeric` VARCHAR(255) ); ``` 2. **字段类型定义错误** `NUMERIC` 是一种合法的字段类型,通常用于定义精确的数值数据。如果在定义字段时拼写错误、参数不正确或与版本不兼容,也可能导致语法错误。例如: ```sql CREATE TABLE test ( value NUMERIC(10, 2) ); ``` 这是合法的语法,但如果写成 `NUMERIC(10 2)` 或 `NUMERIC(10,2,3)`,则会触发语法错误。确保字段定义中的参数正确无误。 3. **SQL 模式或版本差异** 不同版本的 MySQLSQL 语法的支持略有差异。例如,某些版本可能对 `NUMERIC` 类型的精度支持有限,或者对某些函数的使用方式进行了限制。可以通过以下命令查看当前 MySQL 的版本和 SQL 模式: ```sql SELECT VERSION(); SELECT @@GLOBAL.sql_mode; ``` 如果发现 SQL 模式过于严格,可以适当调整以兼容旧语法: ```sql SET GLOBAL sql_mode = 'STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION'; ``` 4. **拼写错误或语法结构错误** 检查 SQL 语句中是否有拼写错误,尤其是字段名、表名、关键字等。例如,在 `INSERT` 语句中遗漏逗号、引号不匹配、括号不闭合等问题都可能导致解析错误。 错误示例: ```sql INSERT INTO table (id, numeric) VALUES (1, 'test' ``` 正确示例: ```sql INSERT INTO table (id, `numeric`) VALUES (1, 'test'); ``` ### 调试建议 - **逐步简化 SQL 语句**:从最简单的语句开始,逐步添加字段或条件,定位错误发生的准确位置。 - **使用反引号包裹字段名**:如果字段名是保留关键字,务必使用 `` ` `` 包裹。 - **查阅官方文档**:根据 MySQL 版本查阅对应的官方文档,确认语法支持情况。 - **启用日志记录**:开启 MySQL 的查询日志功能,记录所有执行的 SQL 语句,便于排查问题。 ### 示例:创建包含 `numeric` 字段的表 ```sql CREATE TABLE `data_table` ( `id` INT PRIMARY KEY AUTO_INCREMENT, `name` VARCHAR(255), `numeric_value` NUMERIC(10, 2) ) ENGINE=InnoDB DEFAULT CHARSET=utf8; ``` ### 示例:插入数据时使用转义字段名 ```sql INSERT INTO `data_table` (`id`, `name`, `numeric_value`) VALUES (1, 'Sample', 123.45); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值