开发者社区> 问答> 正文

使用druid解析sql批量插入语句时出错,无法解析

使用SQLUtils.parseStatements(sql,dbtype)解析sql语句,在进行解析类似insert into t (id,name) values (?,?), (?,?), (?,?)批量插入语句时,出现错误,表现在解析完一个插入列后便结束后面的解析,造成下一个COMMA无法解析的错误, src/main/java/com/alibaba/druid/sql/parser/SQLStatementParser.java line:1475-1481 if (lexer.token() == Token.VALUES) { lexer.nextToken(); accept(Token.LPAREN); SQLInsertStatement.ValuesClause values = new SQLInsertStatement.ValuesClause(); this.exprParser.exprList(values.getValues(), values); insertStatement.setValues(values); accept(Token.RPAREN); }

@wenshao 这是否是一个bug?或者使用方式不正确?如果是bug,可否尽快修复

原提问者GitHub用户leezongjie

展开
收起
山海行 2023-07-05 21:55:41 639 0
3 条回答
写回答
取消 提交回答
  • 北京阿里云ACE会长

    Druid是一款流行的Java数据库连接池和SQL解析工具,可以用于解析和优化SQL语句。在使用Druid解析SQL批量插入语句时,可能会出现无法解析的情况。这个问题通常是因为Druid默认情况下只支持解析简单的SQL语句,而对于复杂的SQL语句(如批量插入语句),需要进行一些特殊的配置才能解析。

    为了解决这个问题,可以采取以下措施:

    配置Druid的解析器:Druid提供了多个SQL解析器,可以根据不同的SQL语言版本和语法特点进行选择和配置。对于批量插入语句,可以尝试配置Druid的MySqlInsertStatement和MySqlSelectIntoStatement解析器,例如:

    Copy
    parserConfig.setInsertValuesClauseType(InsertValuesClauseType.MYSQL);
    parserConfig.setSelectIntoOutfile(true);
    这些配置可以在DruidDataSource初始化时进行设置。

    修改SQL语句:如果Druid无法解析批量插入语句,可以尝试对SQL语句进行修改,例如将多个插入值合并为一个,或者分别执行多条插入语句。

    使用其他SQL解析工具:如果Druid解析无法满足需求,可以考虑使用其他的SQL解析工具,例如ANTLR和JSqlParser等。

    2023-07-30 09:38:33
    赞同 展开评论 打赏
  • 值得去的地方都没有捷径

    很抱歉听到你遇到了问题。根据你提供的信息,出现解析错误的原因可能是sql语句的格式与SQLUtils.parseStatements方法的预期不匹配,导致解析过程中出现错误。

    我无法判断这是否是一个Bug,因为需要更多的上下文和详细信息来确定。建议你参考Druid的官方文档、示例代码或者查询社区论坛,看看是否有其他用户遇到类似的问题并找到了解决方法。

    你也可以尝试以下方法来解决问题:

    确保使用的Druid版本是最新的。有时候旧版本的库存在一些已知的问题,新版本可能会修复这些问题。
    检查SQL语句的格式,确保它符合批量插入语句的写法。可能需要检查括号、逗号、值的数量等。
    尝试使用不同的解析方法或工具来解析SQL语句,看看是否能够避免出现错误。
    如果问题依然存在,建议你将完整的错误信息、使用的Druid版本、示例SQL语句等信息提供给Druid的开发者或社区,以便他们更深入地帮助你解决问题。他们将能够更好地理解你的情况并提供更准确的解决方案。

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

    原回答者GitHub用户wenshao

    2023-07-06 12:29:34
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
SQL Server在电子商务中的应用与实践 立即下载
GeoMesa on Spark SQL 立即下载
原生SQL on Hadoop引擎- Apache HAWQ 2.x最新技术解密malili 立即下载

相关镜像