0

我正在编写一个 SQL 查询评估器,并且我正在使用 JSQLParser 来解析查询。现在看来(并且也通过此链接http://sourceforge.net/p/jsqlparser/feature-requests/2/建议)JSQLParser 不允许 SQL 的 FROM 子句中的多个项目。

当我做

statement.getFromItem().toString();

where statement 是 type 的对象PlainSelect,我只从 FROM 子句中获得第一个表名。FromItem 类中没有toArray()方法。

有什么解决方法吗?

4

1 回答 1

2

事实上,JSQLParser 能够解析您的语句或您提到的示例:

select t1.a, t2.b from t1, t2 where t1.id = t2.id

第二个表不被识别为第二个FromItem,而是一个简单的 Join。要获取您的表格,您还需要查看getJoins

这是我的测试代码,它是在 github https://github.com/JSQLParser/JSqlParser上使用 JSqlParser 的分支编写的。

public class MultiFromItems {
    public static void main(String args[]) throws JSQLParserException {
        String sql = "select t1.a, t2.b from t1, t2 where t1.id = t2.id";
        Statement parse = CCJSqlParserUtil.parse(sql);
        Select select = (Select)parse;
        PlainSelect ps = (PlainSelect)select.getSelectBody();
        System.out.println(ps);
        System.out.println(ps.getFromItem());
        System.out.println(ps.getJoins().get(0));
    }
}
于 2014-02-18T17:02:18.237 回答