开发者社区> 问答> 正文

druid-1.0.31参数化输出有点问题

String sql = "SELECT id FROM test WHERE type = 9 AND name = ? AND orderId in (1, 2, 3);"; MySqlStatementParser parser = new MySqlStatementParser(sql); SQLStatement s = parser.parseStatement(); StringWriter out = new StringWriter(); MySqlExportParameterVisitor v = new MySqlExportParameterVisitor(out); v.setParameterized(true); v.setShardingSupport(false); v.setPrettyFormat(false); s.accept(v);

    System.out.println(v.getParameters());
    System.out.println(v.getTables());
    assertEquals("SELECT id FROM test WHERE type = ? AND name = ? AND orderId IN (?)", out.toString());

但实际上得到的结果是:

org.junit.ComparisonFailure: Expected :SELECT id FROM test WHERE type = ? AND name = ? AND orderId IN (?) Actual :SELECT id FROM test WHERE type = ? AND name = 9 AND orderId IN (?)

分析了下,在解析type = 9时放到了parameters这个内部变量中去了,再解析name = ?中遇到了?时,又把9输出了。

但如果sql是:SELECT id FROM test WHERE name = ? AND type = 9 AND orderId in (1, 2, 3)的话就能全部做参数化输出了。

原提问者GitHub用户wangyeweikuer

展开
收起
山海行 2023-07-05 20:56:21 142 0
3 条回答
写回答
取消 提交回答
  • 根据你提供的代码,可能是由于 MySqlExportParameterVisitor 的设置不正确导致参数化输出问题。

    在创建 MySqlExportParameterVisitor 对象时,将 parameterized 属性设置为 true,以启用参数化输出。但是,你将 setShardingSupport 属性设置为 false,这可能会影响参数化输出的结果。

    另外,你可以将 setPrettyFormat 属性设置为 true,以便更好地查看输出结果。

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

    1. 将 setShardingSupport 属性设置为 true,如果你需要支持分片查询。

    v.setShardingSupport(true);
    

    2. 确保你使用的是 Druid 的最新版本。在最新版本中,可能已经修复了参数化输出的问题。

    3. 如果问题仍然存在,你可能需要查阅 Druid 的文档或咨询相关技术支持,以获取更具体的帮助和解决方案。

    希望这些信息对你有所帮助!

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

    根据你提供的代码,可能是由于 MySqlExportParameterVisitor 的设置不正确导致的参数化输出问题。

    你在创建 MySqlExportParameterVisitor 对象时,将 parameterized 属性设置为 true,这会启用参数化输出。但是你将 setShardingSupport 属性设置为 false,这可能会影响参数化输出的结果。

    另外,你可以将 setPrettyFormat 属性设置为 true,以便更好的查看输出结果。

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

    原回答者GitHub用户wenshao

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

相关电子书

更多
低代码开发师(初级)实战教程 立即下载
冬季实战营第三期:MySQL数据库进阶实战 立即下载
阿里巴巴DevOps 最佳实践手册 立即下载