我正在编写一个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,而是一个简单的Join。要获取表,您还需要研究getJoins。
这是我的测试代码,它是使用github https://github.com/JSQLParser/JSqlParser上的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));
}
}
关于java - 使用JSQLParser从项目中提取多个,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21860113/