gpt4 book ai didi

java - JSqlParser - 从列中获取表名

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:24:54 26 4
gpt4 key购买 nike

我刚刚开始探索 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);
}

最佳答案

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

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

select col1 from table1

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

select table1.col1 from table1

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

为什么?如果您查看此示例,它是一个正确的 SQL:

select col1 from table1, table2

很明显,计算列所属的表需要数据库架构本身。

关于java - JSqlParser - 从列中获取表名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37250588/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com