中易网

有人用过JSqlParser吗

答案:2  悬赏:20  
解决时间 2021-01-06 20:46
有人用过JSqlParser吗
最佳答案
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 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 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 orderByElements) {
if (orderByElements == null) {
return false;
}
for (OrderByElement orderByElement : orderByElements) {
if (orderByElement.toString().toUpperCase().contains("?")) {
return true;
}
}
return false;
}
全部回答
用过。
jsqlparser的数据结构比较简单,更清晰,因而我选择了一种正向强制设置order by属性为null的方式来去除order by
由于jsqlparser结构简单,继承也不复杂,并且setter和getter方法很全面,所以处理起来很容易。
jsqlparser还能通过方法来编辑某部分的sql,例如增加一个查询列,增加一个表等等。更多的方法可以看wiki和源码。
我要举报
如以上问答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
九江的著名酒店有哪些?
纸火锅在一些地方悄然兴起。纸火锅的材料是普
砖混二层楼地基做74公分,,地圈梁做宽24公分
maancoffee漫咖啡(通州店)怎么去啊,我要去那
小学生硬笔凹槽字帖对写字有帮助吗
2016年3月8号到2017年3月8号一共有多少天
安桥tx-sr444配惠威Jam&Lab 8前置和Jam&Lab
求解答这题!!要有过程!! 如图O、A点是两
一粒花生多少克
魔兽洪荒1.26z 罪恶之源怎么得
有妖气里面的妖果有什么作用
这个是正常的脚吗
怎么加入安惠
标称容量是什么意思?
沙城之春阅读答案《杨子晚报》
推荐资讯
谨遵师教 日语怎么说
求一个带有义字和梅字的网名,诗情画意点,有
我是个孤儿提到爸爸妈妈的事总是默默的泪流是
索尼VGN-CS36H 如何进入BOIS
怎么把DV摄像机连接到电脑上,让电脑屏幕前,
子网掩码是相关问题,求大神来
2017兴化板桥初中中考成绩
唯美甲艺地址有知道的么?有点事想过去
有没有人玩通素晴日的,为什么这个游戏满满的
60颗新鲜龙眼的热量是多少
广州朗豪酒店到香港机场
1.25X3.4X0.8简便计算
手机登qq时,显示手机磁盘不足,清理后重新登
刺客的套装怎么选啊?