我正在编写一个SQL查询计算器,并使用JSQLParser解析该查询。现在看来(并且这个链接http://sourceforge.net/p/jsqlparser/feature-requests/2/也建议),JSQLParser不允许在SQL的FROM子句中包含多个项。
当我这么做
statement.getFromItem().toString();如果语句是PlainSelect类型的对象,则只能从from子句获得第一个表名。在toArray()类中没有FromItem方法。
有什么解决办法吗?
发布于 2014-02-18 17:02:18
实际上,JSQLParser能够解析您的语句或您提到的示例:
select t1.a, t2.b from t1, t2 where t1.id = t2.id第二个表不被识别为第二个FromItem,而是一个简单连接。要获得您的表,还需要查看getJoins。
下面是我的测试代码,它是使用JSqlParser在github 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));
}
}https://stackoverflow.com/questions/21860113
复制相似问题