Java 如何使用jsqlparser区分普通sql查询和连接查询?
我试图获取sql查询的所有详细信息。如果我提供的查询是从TAB1.a=TAB2.b中的TAB1内部连接TAB2中选择a,b,其中a>5,则其工作正常。但当从选项卡中选择a、b时,它抛出异常java.lang.NullPointerException。 对应的代码是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
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的工作方式。