JSqlParser - 从列中获取 table 名称

JSqlParser - Getting table name from Column

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

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

这不会打印 table,在大多数情况下它会打印 null,在极少数情况下它会打印 table 的别名而不是 table。有什么我忘记了吗?

其余访问

@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);
}

首先你的源代码是正确的。你必须牢记:

JSqlParser 只是一个解析器。所以如果你做类似

select col1 from table1

解析器生成的对象 不知道它的 table 名称。仅当您完全限定时才会出现这种情况:

select table1.col1 from table1

类似的行为发生在别名上。 JSqlParser 不扩展 别名定义。

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

select col1 from table1, table2

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