我刚刚开始探索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);
}
答案 0 :(得分:6)
首先,您的源代码是正确的。你必须记住:
JSqlParser 只是一个解析器。所以,如果你做了像
这样的事情select col1 from table1
解析器生成的对象列不知道其表名。只有在完全限定的情况下才会出现这种情况:
select table1.col1 from table1
使用别名会发生类似的行为。 JSqlParser 不会扩展别名定义。
为什么呢?如果你看一下这个例子,这是一个正确的SQL:
select col1 from table1, table2
很明显,计算列所属的表需要数据库模式本身。