Java 如何使用jsqlparser区分普通sql查询和连接查询?

Java 如何使用jsqlparser区分普通sql查询和连接查询?,java,Java,我试图获取sql查询的所有详细信息。如果我提供的查询是从TAB1.a=TAB2.b中的TAB1内部连接TAB2中选择a,b,其中a>5,则其工作正常。但当从选项卡中选择a、b时,它抛出异常java.lang.NullPointerException。 对应的代码是 public class ParseJSQLService implements ParseJSQLServiceInterface { TablesNamesFinder tablesNamesFinder = new Ta

我试图获取sql查询的所有详细信息。如果我提供的查询是从TAB1.a=TAB2.b中的TAB1内部连接TAB2中选择a,b,其中a>5,则其工作正常。但当从选项卡中选择a、b时,它抛出异常java.lang.NullPointerException。 对应的代码是

public class ParseJSQLService implements ParseJSQLServiceInterface
{
    TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();

@Override
public QueryDetails parseSqlDetails(QueryDetails queryDetails) throws    JSQLParserException 
{
    CCJSqlParserManager parserManager = new CCJSqlParserManager();
    String sql=queryDetails.getQueryText();
    Statement statement=parserManager.parse(new StringReader(sql));
            String joinType="";
    if(statement instanceof Select)
    {
        Select selectstatement=(Select) statement;
        System.out.println(selectstatement);
        PlainSelect plainSelect=(PlainSelect) selectstatement.getSelectBody();
        String fromItems=plainSelect.getFromItem().toString();
        String fieldItems=plainSelect.getSelectItems().toString();


        System.out.println("fromItems====>"+fromItems);
        System.out.println("fieldItems====>"+fieldItems);

        List tableList=tablesNamesFinder.getTableList(selectstatement);
        System.out.println(tableList.size());

        System.out.println(tableList.toString());

        joinType=plainSelect.getJoins().toString();
        System.out.println("joinType====>"+joinType);
    }
        }
问题是JSQLParser在第二个SQL中没有找到连接。因此,plainSelect.getJoins提供空值。这就是为什么plainSelect.getJoins.toString抛出NullPointerException。稍微修改一下,您的代码也可以使用第二个SQL

if (plainSelect.getJoins() != null) {
    joinType = plainSelect.getJoins().toString();
    System.out.println("joinType====>" + joinType);
}

如果它对你有帮助,那就让它成为一个有用的答案;。我不知道您使用的是哪个版本的JSqlParser,但我可以在github上介绍我的fork:。原始版本在sourceforge的开发似乎陷入了困境。因此,如果它有效并帮助您,请接受这个答案或投票支持它。你知道这就是stackexchange的工作方式。