java - 使用 JSQLParser 从项目中选取多个

标签 java mysql sql jsqlparser

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

当我这样做的时候

statement.getFromItem().toString();

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

有什么解决办法吗?

最佳答案

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

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

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

这是我的测试代码,是使用github上的JSqlParser的fork编写的https://github.com/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));
    }
}

关于java - 使用 JSQLParser 从项目中选取多个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21860113/

相关文章:

java - 用于编译和运行java东西的.bat文件

php - 如何在 PHP 中从 URL 获取并存储多个值?

sql - 使用 squirrel 的 SQL 中的 DB2 存储过程。无法循环播放

sql - 如何减去而不是添加 Sum() 之类的 sql 函数

java - 如何从不同的类中增加一个值(在主类中)

java - Controller 不接受数据 POST 404

java - 在选定的饼图值上创建删除对话框?

mysql - SQL Server 中的 COALESCE 与 MySQL 中的 COALESCE

sql - mySQL::insert into table,来自另一个表的数据?

sql - sql中大写字母的拆分词