JSqlParser - 从Column获取表名

时间:2016-05-16 09:25:10

标签: java jsqlparser

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

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

这个不打印的表,对于大多数情况,它打印为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);
}

1 个答案:

答案 0 :(得分:6)

首先,您的源代码是正确的。你必须记住:

JSqlParser 只是一个解析器。所以,如果你做了像

这样的事情
select col1 from table1

解析器生成的对象不知道其表名。只有在完全限定的情况下才会出现这种情况:

select table1.col1 from table1

使用别名会发生类似的行为。 JSqlParser 不会扩展别名定义。

为什么呢?如果你看一下这个例子,这是一个正确的SQL:

select col1 from table1, table2

很明显,计算列所属的表需要数据库模式本身。