0

我使用 CCJSqlParser 来解析 sql。我会遇到致命的问题。

我的java代码如下

String sqlStr = "SELECT t1.Key as Key1,  t2.Key as Key2   FROM tabel1 as t1, tabel2 as t2 WHERE t1.Key = t2.Key";
Statement statement = CCJSqlParserUtil.parse(sqlStr);

例外情况如下:

  12:11:27,608         INFO ParseSqlUtil:29 - start to parse SQL: SELECT t1.Key as Key1,  t2.Key as Key2   FROM tabel1 as t1, tabel2 as t2 WHERE t1.Key = t2.Key
    net.sf.jsqlparser.JSQLParserException12:11:27,650         INFO SparkTest:347 - excetption:null

        at net.sf.jsqlparser.parser.CCJSqlParserUtil.parse(CCJSqlParserUtil.java:51)
        at com.spark.ml.query.ParseSqlUtil.parseSqlToSparkQueryDto(ParseSqlUtil.java:30)
        at com.spark.ml.query.SparkTest.main(SparkTest.java:342)
    Caused by: net.sf.jsqlparser.parser.ParseException: Encountered " "." ". "" at line 1, column 10.
    Was expecting one of:
        <EOF> 
        "AS" ...
        "DO" ...
        "INTO" ...
        "FROM" ...
4

1 回答 1

0

使用 JSqlParser V0.9.2 您的语句被成功解析。

String sqlStr = "SELECT t1.Key as Key1,  t2.Key as Key2   FROM tabel1 as t1, tabel2 as t2 WHERE t1.Key = t2.Key";
Statement statement = CCJSqlParserUtil.parse(sqlStr);   
System.out.println(statement.toString());

给出正确的输出:

SELECT t1.Key AS Key1, t2.Key AS Key2 FROM tabel1 AS t1, tabel2 AS t2 WHERE t1.Key = t2.Key

我假设问题是列名key,它是 JSqlParser 的关键字。在最近的版本中,数据库对象名称允许使用越来越多的关键字。

于 2015-03-20T10:21:02.183 回答