开发者社区> 问答> 正文

H2数据库 Merge 语法解析异常

T59.png

2017-09-01 20:12:08 INFO [com.alibaba.druid.pool.DruidDataSource] com.alibaba.druid.pool.DruidDataSource.init(DruidDataSource.java:854)- {dataSource-1} inited 2017-09-01 20:12:08 DEBUG [org.springframework.jdbc.core.JdbcTemplate] org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:505)- Executing SQL update [merge into person key(id) select * from person_test] 2017-09-01 20:12:08 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] org.springframework.jdbc.datasource.DataSourceUtils.doGetConnection(DataSourceUtils.java:110)- Fetching JDBC Connection from DataSource 2017-09-01 20:12:09 ERROR [com.alibaba.druid.filter.stat.StatFilter] com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:148)- merge sql error, dbType h2, sql : merge into person key(id) select * from person_test com.alibaba.druid.sql.parser.ParserException: syntax error, error in :'erge into person key(id) select * f',expect IDENTIFIER, actual IDENTIFIER pos 5, line 1, column 6, token IDENTIFIER into at com.alibaba.druid.sql.parser.SQLParser.printError(SQLParser.java:280) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:385) at com.alibaba.druid.sql.parser.SQLStatementParser.parseStatementList(SQLStatementParser.java:78) at com.alibaba.druid.sql.visitor.ParameterizedOutputVisitorUtils.parameterize(ParameterizedOutputVisitorUtils.java:43) at com.alibaba.druid.filter.stat.StatFilter.mergeSql(StatFilter.java:146) at com.alibaba.druid.filter.stat.StatFilter.createSqlStat(StatFilter.java:634) at com.alibaba.druid.filter.stat.StatFilter.internalBeforeStatementExecute(StatFilter.java:402) at com.alibaba.druid.filter.stat.StatFilter.statementExecuteUpdateBefore(StatFilter.java:330) at com.alibaba.druid.filter.FilterEventAdapter.statement_executeUpdate(FilterEventAdapter.java:324) at com.alibaba.druid.filter.FilterChainImpl.statement_executeUpdate(FilterChainImpl.java:2486) at com.alibaba.druid.proxy.jdbc.StatementProxyImpl.executeUpdate(StatementProxyImpl.java:241) at com.alibaba.druid.pool.DruidPooledStatement.executeUpdate(DruidPooledStatement.java:243) at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:509) at org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:1) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:396) at org.springframework.jdbc.core.JdbcTemplate.update(JdbcTemplate.java:519) at nari.test.redisson.DuridH2Test.executeNonQuery(DuridH2Test.java:48) at nari.test.redisson.DuridH2Test.main(DuridH2Test.java:56) 2017-09-01 20:12:09 DEBUG [org.springframework.jdbc.core.JdbcTemplate] org.springframework.jdbc.core.JdbcTemplate$1UpdateStatementCallback.doInStatement(JdbcTemplate.java:511)- SQL update affected 8 rows 2017-09-01 20:12:09 DEBUG [org.springframework.jdbc.datasource.DataSourceUtils] org.springframework.jdbc.datasource.DataSourceUtils.doReleaseConnection(DataSourceUtils.java:332)- Returning JDBC Connection to DataSource

原提问者GitHub用户godsmell

展开
收起
山海行 2023-07-05 20:46:21 143 0
3 条回答
写回答
取消 提交回答
  • 根据日志信息,你的应用程序在使用H2数据库的Merge语法时遇到了解析异常。这可能是由于H2数据库版本不兼容或者语法错误导致的。

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

    1. 检查H2数据库的版本:确保你正在使用最新版本的H2数据库。较新的版本通常会提供更好的语法支持和修复一些已知的解析问题。

    2. 检查Merge语法的正确性:仔细检查你的Merge语句是否存在语法错误。确保关键字、括号和表达式都按照正确的语法规则编写。

    3. 尝试替代方案:如果无法解决解析异常,你可以考虑使用其他的SQL语句来代替Merge语法实现相同的功能。例如,可以使用Insert和Update语句分别进行插入和更新操作。

    4. 检查表和列名:确保Merge语句中使用的表和列名与实际数据库中的表和列名匹配。如果名称不正确,可能会导致解析异常。

    注意,H2数据库的语法支持可能有限,因为它的使用范围相对较小。如果以上方法仍然无法解决问题,你可以考虑切换到其他更广泛使用的数据库来避免此类解析异常。希望这些方法能够帮助你解决问题!如果有任何其他疑问,请随时提问。

    2023-07-30 14:12:08
    赞同 展开评论 打赏
  • 北京阿里云ACE会长

    可能是由于H2数据库版本不兼容或使用不正确的语法导致的。

    在H2数据库中,Merge语法通常用于将数据插入到表中,如果表中已经存在相同的记录,则更新该记录的值。
    如果在使用Merge语法时遇到了解析异常,可以尝试以下解决方法:

    检查H2数据库的版本,确保使用的是支持Merge语法的版本。通常情况下,H2数据库的高版本会支持更多的SQL语法和特性,建议使用最新的版本。

    检查Merge语法的语法是否正确。例如,如果Merge语法中缺少关键字或者括号不匹配,可能会导致解析异常。建议对Merge语法进行仔细的检查和测试。

    尝试使用其他的SQL语法替代Merge语法。例如,可以使用Insert语法和Update语法分别实现插入和更新操作,以避免Merge语法的兼容性问题。

    检查与Merge语法相关的表和列名是否正确。例如,Merge语法中使用的表和列名可能会与数据库中的实际表和列名不匹配,导致解析异常。建议对表和列名进行仔细的检查和测试。

    2023-07-30 13:36:32
    赞同 展开评论 打赏
  • 目前对h2的语法支持不够好,主要是这个数据库使用不够广泛

    原回答者GitHub用户wenshao

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

相关电子书

更多
DTCC 2022大会集锦《云原生一站式数据库技术与实践》 立即下载
阿里云瑶池数据库精要2022版 立即下载
2022 DTCC-阿里云一站式数据库上云最佳实践 立即下载

相关镜像