我刚刚开始探索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)
首先,您的源代码是正确的.你必须记住:
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)
很明显,计算列所属的表需要数据库模式本身.
| 归档时间: |
|
| 查看次数: |
1209 次 |
| 最近记录: |