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 列所属需要数据库模式本身。
我刚刚开始探索 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 列所属需要数据库模式本身。