解析oracle的Select语句时,SQLSelectQueryBlock能够将原本的SQL语句获取到,而db2只能获取到com.alibaba.druid.sql.dialect.db2.ast.stmt.DB2SelectQueryBlock@4c6d5d41这种形式,请问能不能跟oracle一样支持将原本的SQL语句获取出来,这样对于后续的解析处理比较方便
原提问者GitHub用户johnchenjy
在解析DB2的Select语句时,可以使用开源的SQL解析工具,例如Druid等。在Druid中,可以通过以下步骤获取SQLSelectQueryBlock对象:
将SQL语句解析为SQLStatement对象。可以使用SQLUtils类的parseStatement方法将SQL语句解析为SQLStatement对象,代码示例如下:
Copy
String sql = "SELECT * FROM mytable WHERE id = 1";
SQLStatement stmt = SQLUtils.parseStatements(sql, JdbcUtils.DB_TYPE_DB2).get(0);
其中,JdbcUtils.DB_TYPE_DB2表示数据库类型为DB2。
从SQLStatement对象中获取SQLSelectStatement对象。由于DB2的Select语句通常是SQLSelectStatement类型的,因此可以通过强制类型转换的方式获取该对象,代码示例如下:
Copy
SQLSelectStatement selectStmt = (SQLSelectStatement) stmt;
从SQLSelectStatement对象中获取SQLSelectQueryBlock对象。可以通过getSelect()方法获取SQLSelect对象,然后通过getQuery()方法获取SQLSelectQuery对象,最后通过getQueryBlock()方法获取SQLSelectQueryBlock对象,代码示例如下:
Copy
SQLSelect select = selectStmt.getSelect();
SQLSelectQuery query = select.getQuery();
SQLSelectQueryBlock queryBlock = query.getQueryBlock();
问题已修复,请用新版本 https://github.com/alibaba/druid/releases/tag/1.1.14
原回答者GitHub用户wenshao
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。