JAVA - Sql解析工具jsqlparser简单使用
来源:互联网 发布:电脑摄像头做网络监控 编辑:程序博客网 时间:2024/06/13 09:41
SqlParser - github地址:https://github.com/JSQLParser/JSqlParser
SqlParser最新版jar下载:http://search.maven.org/remotecontent?filepath=com/github/jsqlparser/jsqlparser/0.9.1/jsqlparser-0.9.1.jar
来源:http://blog.csdn.net/isea533/article/details/40375183
前面有一篇博客介绍了另一个fdb-sql-parser的简单使用。由于fdb-sql-parser针对性比较强,对不同数据库的通用性不好,所以尝试了另一个sql解析工具jsqlparser。
在jsqlparser的wiki页面有简单的使用方法:https://github.com/JSQLParser/JSqlParser/wiki
这里仍然用去除order by做例子。
jsqlparser的数据结构比较简单,更清晰,因而我选择了一种正向强制设置order by属性为null的方式来去除order by
下面是需要用到的几个方法:
- public String removeOrderBy(String sql) throws JSQLParserException {
- Statement stmt = CCJSqlParserUtil.parse(sql);
- Select select = (Select) stmt;
- SelectBody selectBody = select.getSelectBody();
- processSelectBody(selectBody);
- return select.toString();
- }
- public void processSelectBody(SelectBody selectBody) {
- if (selectBody instanceof PlainSelect) {
- processPlainSelect((PlainSelect) selectBody);
- } else if (selectBody instanceof WithItem) {
- WithItem withItem = (WithItem) selectBody;
- if (withItem.getSelectBody() != null) {
- processSelectBody(withItem.getSelectBody());
- }
- } else {
- SetOperationList operationList = (SetOperationList) selectBody;
- if (operationList.getPlainSelects() != null && operationList.getPlainSelects().size() > 0) {
- List<PlainSelect> plainSelects = operationList.getPlainSelects();
- for (PlainSelect plainSelect : plainSelects) {
- processPlainSelect(plainSelect);
- }
- }
- if (!orderByHashParameters(operationList.getOrderByElements())) {
- operationList.setOrderByElements(null);
- }
- }
- }
- public void processPlainSelect(PlainSelect plainSelect) {
- if (!orderByHashParameters(plainSelect.getOrderByElements())) {
- plainSelect.setOrderByElements(null);
- }
- if (plainSelect.getFromItem() != null) {
- processFromItem(plainSelect.getFromItem());
- }
- if (plainSelect.getJoins() != null && plainSelect.getJoins().size() > 0) {
- List<Join> joins = plainSelect.getJoins();
- for (Join join : joins) {
- if (join.getRightItem() != null) {
- processFromItem(join.getRightItem());
- }
- }
- }
- }
- public void processFromItem(FromItem fromItem) {
- if (fromItem instanceof SubJoin) {
- SubJoin subJoin = (SubJoin) fromItem;
- if (subJoin.getJoin() != null) {
- if (subJoin.getJoin().getRightItem() != null) {
- processFromItem(subJoin.getJoin().getRightItem());
- }
- }
- if (subJoin.getLeft() != null) {
- processFromItem(subJoin.getLeft());
- }
- } else if (fromItem instanceof SubSelect) {
- SubSelect subSelect = (SubSelect) fromItem;
- if (subSelect.getSelectBody() != null) {
- processSelectBody(subSelect.getSelectBody());
- }
- } else if (fromItem instanceof ValuesList) {
- } else if (fromItem instanceof LateralSubSelect) {
- LateralSubSelect lateralSubSelect = (LateralSubSelect) fromItem;
- if (lateralSubSelect.getSubSelect() != null) {
- SubSelect subSelect = (SubSelect) (lateralSubSelect.getSubSelect());
- if (subSelect.getSelectBody() != null) {
- processSelectBody(subSelect.getSelectBody());
- }
- }
- }
- //Table时不用处理
- }
- public boolean orderByHashParameters(List<OrderByElement> orderByElements) {
- if (orderByElements == null) {
- return false;
- }
- for (OrderByElement orderByElement : orderByElements) {
- if (orderByElement.toString().toUpperCase().contains("?")) {
- return true;
- }
- }
- return false;
- }
由于jsqlparser结构简单,继承也不复杂,并且setter和getter方法很全面,所以处理起来很容易。
0 0
- JAVA - Sql解析工具jsqlparser简单使用
- JAVA - Sql解析工具jsqlparser简单使用
- java 使用JSqlParser 解析sql语句中的表字段
- Java SQL语句解析——Jsqlparser开源项目
- 利用jsqlparser解析SQL语句
- 使用java sql parser插件Jsqlparser 实例(二)
- JAVA - Sql解析工具fdb-sql-parser简单使用
- JAVA - Sql解析工具fdb-sql-parser简单使用
- org.tinygroup.jsqlparser-SQL解析器
- org.tinygroup.jsqlparser-SQL解析器
- java SQL语法解释器jsqlparser
- JSQLParser
- SQL 语法解释器jsqlparser
- jspSqlparser解析sql语句的简单使用
- java简单使用redis的工具类
- Java使用Jsoup简单解析页面
- Java Code Examples for net.sf.jsqlparser.statement.select.Union
- Java简单工具:UDP通讯工具类(测试使用)
- TextFieldView设置背景提示placehodel,让textFiledView输入从最上面输入
- LuaBridge:Lua绑定C/C++对象
- Java协程框架--Kilim框架Fiber浅析
- CentOS中vsftp安装与配置
- codevs合唱队形 动态规划求最长递增子序列
- JAVA - Sql解析工具jsqlparser简单使用
- spket插件安装并设置JQuery自动提示
- sql查询语句
- summary of SET/MAP
- T-SQL:提取第一次出现的数字组合
- 【Unity3d】学习笔记(8)
- Nodejs express之参数接收
- java 存储方式详解及示例
- hdu 5207 Greatest Greatest Common Divisor