Java SQL语句解析——Jsqlparser开源项目
来源:互联网 发布:风声小说知乎 编辑:程序博客网 时间:2024/06/08 11:43
Java SQL语句解析——Jsqlparser开源项目
项目需要解析SQL语句获得表名以及where中的字段,自认为自己写代码来解析比较复杂也就在网上找相关的资料,最后找到这个开源项目JSqlparser.
jar包
jsqlparser-0.9.1.jar
github项目
jsqlparser-github
sourceforge上项目介绍
jsqlparser-sourceforge
相关资料准备完成,具体代码如下:
java代码
package com.primeton.sqlparser;import java.io.StringReader;import net.sf.jsqlparser.JSQLParserException;import net.sf.jsqlparser.expression.BinaryExpression;import net.sf.jsqlparser.expression.Expression;import net.sf.jsqlparser.parser.CCJSqlParserManager;import net.sf.jsqlparser.schema.Column;import net.sf.jsqlparser.statement.Statement;import net.sf.jsqlparser.statement.update.Update;/** * @ClassName: JsqlparserDemo * @Description: TODO(这里用一句话描述这个类的作用) * @author yuechang yuechang5@hotmail.com * @date 2015年9月2日 上午11:40:59 */public class JsqlparserDemo { public static void main(String[] args) throws JSQLParserException { demo(); } public static void demo() throws JSQLParserException{ CCJSqlParserManager pm = new CCJSqlParserManager(); StringBuffer stringBuffer = new StringBuffer(); stringBuffer.append("update ac_operator op "); stringBuffer.append("set op.errcount=("); stringBuffer.append("(select case when op1.errcount is null then 0 else op1.errcount end as errcount "); stringBuffer.append("from ac_operator op1 "); stringBuffer.append("where op1.loginname = '中国' )+1"); stringBuffer.append("),lastlogin='中国' "); stringBuffer.append("where PROCESS_ID="); stringBuffer.append("(select distinct g.id from tempTable g where g.ID='中国')"); stringBuffer.append("and columnName2 = '890' and columnName3 = '678' and columnName4 = '456'"); Statement statement = pm.parse(new StringReader(stringBuffer.toString())); if (statement instanceof Update) { //获得Update对象 Update updateStatement = (Update) statement; //获得表名 System.out.println("table:"+updateStatement.getTable().getName()); //获得where条件表达式 Expression where = updateStatement.getWhere(); //初始化接收获得到的字段信息 StringBuffer allColumnNames = new StringBuffer(); //BinaryExpression包括了整个where条件, //例如:AndExpression/LikeExpression/OldOracleJoinBinaryExpression if(where instanceof BinaryExpression){ allColumnNames = getColumnName((BinaryExpression)(where),allColumnNames); System.out.println("allColumnNames:"+allColumnNames.toString()); } } } /** * 获得where条件字段中列名,以及对应的操作符 * @Title: getColumnName * @Description: TODO(这里用一句话描述这个方法的作用) * @param @param expression * @param @param allColumnNames * @param @return 设定文件 * @return StringBuffer 返回类型 * @throws */ private static StringBuffer getColumnName(Expression expression,StringBuffer allColumnNames) { String columnName = null; if(expression instanceof BinaryExpression){ //获得左边表达式 Expression leftExpression = ((BinaryExpression) expression).getLeftExpression(); //如果左边表达式为Column对象,则直接获得列名 if(leftExpression instanceof Column){ //获得列名 columnName = ((Column) leftExpression).getColumnName(); allColumnNames.append(columnName); allColumnNames.append(":"); //拼接操作符 allColumnNames.append(((BinaryExpression) expression).getStringExpression()); //allColumnNames.append("-"); } //否则,进行迭代 else if(leftExpression instanceof BinaryExpression){ getColumnName((BinaryExpression)leftExpression,allColumnNames); } //获得右边表达式,并分解 Expression rightExpression = ((BinaryExpression) expression).getRightExpression(); if(rightExpression instanceof BinaryExpression){ Expression leftExpression2 = ((BinaryExpression) rightExpression).getLeftExpression(); if(leftExpression2 instanceof Column){ //获得列名 columnName = ((Column) leftExpression2).getColumnName(); allColumnNames.append("-"); allColumnNames.append(columnName); allColumnNames.append(":"); //获得操作符 allColumnNames.append(((BinaryExpression) rightExpression).getStringExpression()); } } } return allColumnNames; }}
运行结果
tableName:ac_operatorallColumnNames:PROCESS_ID:=-columnName2:=-columnName3:=-columnName4:=
0 0
- Java SQL语句解析——Jsqlparser开源项目
- 利用jsqlparser解析SQL语句
- java 使用JSqlParser 解析sql语句中的表字段
- JAVA - Sql解析工具jsqlparser简单使用
- JAVA - Sql解析工具jsqlparser简单使用
- org.tinygroup.jsqlparser-SQL解析器
- org.tinygroup.jsqlparser-SQL解析器
- java SQL语法解释器jsqlparser
- 使用java sql parser插件Jsqlparser 实例(二)
- JSQLParser
- SQL 语法解释器jsqlparser
- Java 实现对Sql语句解析
- 机房收费系统初体验——SQL语句解析
- SQL语句解析
- SQL语句全解析
- SQL语句全解析
- SQL语句解析
- SQL语句解析
- C++11中的lambda表达式
- java中byte转换int时为何与0xff进行与运算
- javaweb mysql实现分页功能
- c++编译中出现‘vtable for ***未定义的引用解决办法
- poj1755Triathlon【半平面交】
- Java SQL语句解析——Jsqlparser开源项目
- nyoj 2 括号配对问题
- 封装自己的ajax工具包
- Map与List和Vector性能比较
- android关于用.xml布局文件中对View添加OnClick事件无法响应的事情
- java多态的理解
- 潘鹏整理WPF(2)轻量级文本因Size小模糊解决
- 对Extjs中store的多种操作
- 算法基础——判断一个字符串至多添加一个字符之后是否回文