开发者社区> 问答> 正文

H2数据库 Merge 语法解析异常

2018-05-07 20:42:16,051 [Quartz Scheduler [adminQuartzScheduler]] INFO o.s.scheduling.quartz.SchedulerFactoryBean -[SchedulerFactoryBean.java:708]- Starting Quartz Scheduler now, after delay of 10 seconds 2018-05-07 20:42:16,097 [Quartz Scheduler [adminQuartzScheduler]] ERROR com.alibaba.druid.filter.stat.StatFilter -[StatFilter.java:149]- merge sql error, dbType h2, druid-1.1.8, sql : SELECT * FROM QRTZ_LOCKS WHERE SCHED_NAME = 'adminQuartzScheduler' AND LOCK_NAME = ? FOR UPDATE com.alibaba.druid.sql.parser.ParserException: syntax error, error in :' = ? FOR UPDATE', expect FOR, actual FOR pos 88, line 1, column 85, token FOR at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:284) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:423) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:72) at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:88) at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:50) at com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:147) at com.alibaba.druid.filter.stat.StatFilter.createSqlStat(StatFilter.java:648) at com.alibaba.druid.filter.stat.StatFilter.statementPrepareAfter(StatFilter.java:311) at com.alibaba.druid.filter.FilterEventAdapter.connection_prepareStatement(FilterEventAdapter.java:124) at com.alibaba.druid.filter.FilterChainImpl.connection_prepareStatement(FilterChainImpl.java:473) at com.alibaba.druid.proxy.jdbc.ConnectionProxyImpl.prepareStatement(ConnectionProxyImpl.java:342) at com.alibaba.druid.pool.DruidPooledConnection.prepareStatement(DruidPooledConnection.java:349) 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.quartz.impl.jdbcjobstore.AttributeRestoringConnectionInvocationHandler.invoke(AttributeRestoringConnectionInvocationHandler.java:73) at com.sun.proxy.$Proxy140.prepareStatement(Unknown Source) at org.quartz.impl.jdbcjobstore.StdRowLockSemaphore.executeSQL(StdRowLockSemaphore.java:88) at org.quartz.impl.jdbcjobstore.DBSemaphore.obtainLock(DBSemaphore.java:113) at org.quartz.impl.jdbcjobstore.JobStoreSupport.doCheckin(JobStoreSupport.java:3320) at org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.manage(JobStoreSupport.java:3920) at org.quartz.impl.jdbcjobstore.JobStoreSupport$ClusterManager.initialize(JobStoreSupport.java:3905) at org.quartz.impl.jdbcjobstore.JobStoreSupport.schedulerStarted(JobStoreSupport.java:692) at org.quartz.core.QuartzScheduler.start(QuartzScheduler.java:539) at org.quartz.impl.StdScheduler.start(StdScheduler.java:142) at org.springframework.scheduling.quartz.SchedulerFactoryBean$1.run(SchedulerFactoryBean.java:711) 2018-05-07 20:42:16,129 [Quartz Scheduler [adminQuartzScheduler]] INFO o.s.scheduling.quartz.LocalDataSourceJobStore -[JobStoreSupport.java:3629]- ClusterManager: detected 1 failed or restarted instances. 2018-05-07 20:42:16,129 [Quartz Scheduler [adminQuartzScheduler]] INFO o.s.scheduling.quartz.LocalDataSourceJobStore -[JobStoreSupport.java:3488]- ClusterManager: Scanning for instance "Jeping-PC1525681694826"'s failed in-progress jobs. 2018-05-07 20:42:16,144 [Quartz Scheduler [adminQuartzScheduler]] INFO org.quartz.core.QuartzScheduler -[QuartzScheduler.java:547]- Scheduler adminQuartzScheduler_$_jiaenping1525696922924 started.

原提问者GitHub用户jeping

展开
收起
山海行 2023-07-05 19:55:12 105 0
2 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    这个错误可能是由于使用了不正确的语法或者H2数据库版本不支持MERGE语法导致的。在H2数据库中,MERGE语句用于插入或更新表中的数据。如果您使用了不正确的语法或者H2数据库版本不支持MERGE语法,将会导致语法解析异常。

    为了解决这个问题,您可以尝试以下几个方法:

    检查MERGE语句的语法:请确保您的MERGE语句语法正确,并且符合H2数据库的语法规范。您可以参考H2官方文档来了解MERGE语句的语法规则。

    检查H2数据库的版本:如果您的H2数据库版本不支持MERGE语法,您将无法使用MERGE语句。请确保您的H2数据库版本支持MERGE语法。

    尝试使用其他语句:如果您无法使用MERGE语句,您可以尝试使用其他语句来实现您的需求。例如,您可以使用INSERT INTO和UPDATE语句来插入和更新表中的数据。

    升级H2数据库的版本:如果您的H2数据库版本不支持MERGE语法,您可以考虑升级H2数据库的版本。请注意,在升级H2数据库之前,请备份您的数据库,并确保您的应用程序和数据库不会受到任何负面影响。

    2023-07-30 15:06:38
    赞同 展开评论 打赏
  • 问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14

    原回答者GitHub用户wenshao

    2023-07-06 11:15:50
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载
云时代的数据库技术趋势 立即下载
超大型金融机构国产数据库全面迁移成功实践 立即下载

相关镜像