JSqlParser - 从Column获取表名

Wal*_*eed 7 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());
}
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)

wum*_*mpz 6

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

JSqlParser 只是一个解析器.所以,如果你做的事情

select col1 from table1
Run Code Online (Sandbox Code Playgroud)

解析器生成的对象Column不知道其tablename.只有在完全限定的情况下才会这样:

select table1.col1 from table1
Run Code Online (Sandbox Code Playgroud)

别名发生类似的行为.JSqlParser 不扩展别名定义.

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

select col1 from table1, table2
Run Code Online (Sandbox Code Playgroud)

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