Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用JSQLParser从多个项目中提取_Java_Mysql_Sql_Jsqlparser - Fatal编程技术网

Java 使用JSQLParser从多个项目中提取

Java 使用JSQLParser从多个项目中提取,java,mysql,sql,jsqlparser,Java,Mysql,Sql,Jsqlparser,我正在编写一个SQL查询计算器,并使用JSQLParser解析查询。现在,JSQLParser似乎不允许在SQL的FROM子句中使用多个项(该链接也提出了这一点) 当我这样做的时候 statement.getFromItem().toString(); 其中语句是类型为PlainSelect的对象,我只从from子句中获取第一个tablename。FromItem类中没有toArray()方法 有什么解决方法吗?事实上,JSQLParser能够解析您的语句或您提到的示例: select t1.

我正在编写一个SQL查询计算器,并使用JSQLParser解析查询。现在,JSQLParser似乎不允许在SQL的FROM子句中使用多个项(该链接也提出了这一点)

当我这样做的时候

statement.getFromItem().toString();
其中语句是类型为
PlainSelect
的对象,我只从from子句中获取第一个tablename。FromItem类中没有
toArray()
方法


有什么解决方法吗?

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

select t1.a, t2.b from t1, t2 where t1.id = t2.id
第二个表不被识别为第二个FromItem,而是一个简单联接。要获取表,还需要查看getJoins

下面是我的测试代码,它是使用github上JSqlParser的fork编写的

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));
    }
}