对于一个指定的sql,输入的列名在指定映射后需要替换成另外一个列名。 例如select a from t,输入a->b的映射,sql变为select b from t。 希望8月底前能完成。
原提问者GitHub用户stepenelope
要实现列名的映射需求,您可以按照以下步骤进行操作:
1. 使用Druid的SQL解析器将原始的SQL语句解析成一个SQL语句树。
2. 遍历SQL语句树,查找所有的SELECT语句,并对每个SELECT语句中的列名进行替换。例如,如果有一个映射关系为a->b,那么需要将SELECT a FROM t中的a替换为b。
3. 将修改后的SQL语句树转换回字符串形式的SQL语句。
4. 使用Druid的数据库连接池执行修改后的SQL语句。
在具体实现时,您可以参考Druid的相关文档和示例代码来了解如何使用Druid的SQL解析器和连接池。请注意,这种方法只能替换SQL语句中的列名,不能替换表名或其他SQL元素。同时,如果SQL语句中存在多个相同的列名,替换操作可能会替换所有的列名,可能会导致错误的结果。
如果您想在给定的SQL语句中替换列名,可以使用字符串替换的方式实现。具体来说,您可以使用Java中的String类提供的replace方法,将指定的列名替换为另一个列名。
这种方式只能替换SQL语句中的列名,不能替换表名或其他SQL元素。另外,如果SQL语句中存在多个相同的列名,替换操作可能会替换所有的列名,这可能会导致不正确的结果。
首先,使用Druid的SQL解析器将原始的SQL语句解析成一个SQL语句树。
然后,遍历SQL语句树,将所有的SELECT语句中的列名替换成指定的映射名称。例如,如果指定的映射为a->b,那么需要将SELECT a FROM t中的a替换成b。
最后,将修改后的SQL语句树转换成一个SQL语句,并使用Druid的数据库连接池执行该SQL语句。
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
具体使用方法,请看相关的testcase代码
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。