标签: jsqlparser

如何使用JSQLPARSE从SQl检索表名和列名

我是第一次使用JSQLPARSER.我有一些动态的SQL文件,我需要从该SQL读取表和列名称.经过大量谷歌搜索后,我尝试使用JSQLPARSER.我试图从文件中读取列名,但由于表达式,我无法读取列名,请问任何人在我出错的地方纠正我的代码.我正在获取CLASSCASTEXCEPTION代码:

public static void main(String[] args) throws JSQLParserException
    {
        // TODO Auto-generated method stub
         String statement="SELECT LOCATION_D.REGION_NAME, LOCATION_D.AREA_NAME, COUNT(DISTINCT INCIDENT_FACT.TICKET_ID) FROM LOCATION_D, INCIDENT_FACT WHERE ( LOCATION_D.LOCATION_SK=INCIDENT_FACT.LOCATION_SK ) GROUP BY LOCATION_D.REGION_NAME, LOCATION_D.AREA_NAME"; 
         CCJSqlParserManager parserManager = new CCJSqlParserManager();
         Select select=(Select) parserManager.parse(new StringReader(statement));

         PlainSelect plain=(PlainSelect)select.getSelectBody();     
         List selectitems=plain.getSelectItems();
         System.out.println(selectitems.size());
         for(int i=0;i<selectitems.size();i++)
         {
            Expression expression=((SelectExpressionItem) selectitems.get(i)).getExpression();  
            System.out.println("Expression:-"+expression);
            Column col=(Column)expression;
            System.out.println(col.getTable()+","+col.getColumnName());      
         }
    }
Run Code Online (Sandbox Code Playgroud)

java sql sql-parser jsqlparser

8
推荐指数
1
解决办法
5622
查看次数

JSqlParser - 从Column获取表名

我刚刚开始探索JSqlparser.根据我的理解,我已经修改了TablesNamesFinder以提取列和表,并且它的工作正常但是一个非常小的问题.

@Override
public void visit(Column col) {
    Column c = col;
    String cname = c.getFullyQualifiedName();
    Table t = c.getTable();
    System.out.println(t.getName());
}
Run Code Online (Sandbox Code Playgroud)

这个不打印的表,对于大多数情况它打印为null,并且在极少数情况下它打印表的别名但不打印表.有什么我忘记的吗?

其余的访问

@Override
public void visit(SelectExpressionItem exp){
    exp.getExpression().accept(this);  
}        

@Override
public void visit(Table tableName) {
   // System.out.println(tableName.getFullyQualifiedName()); 
}

@Override
public void visit(Select select) {
    select.getSelectBody().accept(this);
}
Run Code Online (Sandbox Code Playgroud)

java jsqlparser

7
推荐指数
1
解决办法
1209
查看次数

使用 JSqlParser 完全解析 where 子句

我想使用 JSqlParser 完整、简洁地解析 SQL where 子句。很容易将其解析为单独的条件语句,如下所示

String whereClause = "a=3 AND b=4 AND c=5";
Expression expr = CCJSqlParserUtil.parseCondExpression(whereClause);
expr.accept(new ExpressionVisitorAdapter() {

    @Override
    public void visit(AndExpression expr) {
        if (expr.getLeftExpression() instanceof AndExpression) {
            expr.getLeftExpression().accept(this);
        } else if ((expr.getLeftExpression() instanceof EqualsTo)){
            System.out.println(expr.getLeftExpression());
        }
        System.out.println(expr.getRightExpression());
    }
 });
Run Code Online (Sandbox Code Playgroud)

这将产生输出:

a=3
b=4
c=5
Run Code Online (Sandbox Code Playgroud)

我想要的是获取每个单独表达式的左侧、运算符和右侧,以便我可以将值放入一些现有的过滤器对象中。

我知道您可以覆盖每种类型的运算符的访问函数,如下所示:

expr.accept(new ExpressionVisitorAdapter() {

@Override
public void visit(AndExpression expr) {
    if (expr.getLeftExpression() instanceof AndExpression) {
        expr.getLeftExpression().accept(this);
    } else if ((expr.getLeftExpression() instanceof EqualsTo)){
        expr.getLeftExpression().accept(this);
        System.out.println(expr.getLeftExpression());
    }
    expr.getRightExpression().accept(this);
    System.out.println(expr.getRightExpression());
}
@Override
public void …
Run Code Online (Sandbox Code Playgroud)

java sql jsqlparser

4
推荐指数
1
解决办法
6231
查看次数

从 SQL/HQL Java 解析表名和列名

我正在寻找 Java 中的开源 API 来解析 SQL/HQL 查询,以便它为我提供其中使用的列名和表名。我尝试使用 JSQLParser,它为我提供了查询中使用的表名。但我没有看到支持获取查询中使用的列名。有没有其他 API 可以帮助我解决这个问题?我知道通用 SQL 解析器,但它似乎是付费的。

这是使用 JSQLParser 的代码片段,它为我提供了查询中的表名:

Statement statement;
    try
    {
        statement = CCJSqlParserUtil.parse( " SELECT * FROM  ( ( SELECT TBL.ID AS rRowId, TBL.NAME AS name, TBL.DESCRIPTION as description, TBL.TYPE AS type, TBL1.SHORT_NAME AS shortName  FROM ROLE_TBL TBL WHERE ( TBL.TYPE = 'CORE' OR  TBL1.SHORT_NAME = 'TNG' AND  TBL.IS_DELETED <> 1  ) ) MINUS ( SELECT TBL.ID AS rRowId, TBL.NAME AS name, TBL.DESCRIPTION as description, TBL.TYPE AS type, TBL3.SHORT_NAME AS shortName,TBL3.NAME …
Run Code Online (Sandbox Code Playgroud)

java oracle parsing jsqlparser

2
推荐指数
1
解决办法
2831
查看次数

使用JSQLParser识别SQL中的函数调用

如何使用JSQLParser区分函数调用和字段名称?

例如,查询SELECT COUNT(*) FROM db.table解析COUNT(*)为字段名称而不是函数调用.

如何更改SQL解析以显示COUNT(*)为函数调用,我需要做什么?

谢谢,

马克斯

java sql jsqlparser

1
推荐指数
1
解决办法
3484
查看次数

标签 统计

java ×5

jsqlparser ×5

sql ×3

oracle ×1

parsing ×1

sql-parser ×1