完整程序:运用Jsqlparser提取sql语句中所有函数
时间: 2024-03-20 22:43:40 浏览: 254
以下是一个完整的 Java 程序,可以使用 JSqlParser 提取 SQL 语句中的所有函数:
```java
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
import net.sf.jsqlparser.expression.Function;
import net.sf.jsqlparser.parser.CCJSqlParserUtil;
import net.sf.jsqlparser.statement.Statement;
import net.sf.jsqlparser.util.TablesNamesFinder;
import java.util.List;
public class ExtractFunctions {
public static void main(String[] args) {
String sql = "SELECT COUNT(*) FROM orders WHERE YEAR(order_date) = 2021 AND MONTH(order_date) = 7";
try {
Statement statement = CCJSqlParserUtil.parse(sql);
// 提取所有函数
FunctionVisitor visitor = new FunctionVisitor();
statement.accept(visitor);
// 提取所有表名
TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
List<String> tableList = tablesNamesFinder.getTableList(statement);
// 输出结果
System.out.println("Functions:");
for (String function : visitor.getFunctions()) {
System.out.println("- " + function);
}
System.out.println("Tables:");
for (String table : tableList) {
System.out.println("- " + table);
}
} catch (Exception e) {
e.printStackTrace();
}
}
static class FunctionVisitor extends ExpressionVisitorAdapter {
private final StringBuilder sb = new StringBuilder();
@Override
public void visit(Function function) {
sb.append(function.getName().toLowerCase()).append("(");
if (function.getParameters() != null) {
function.getParameters().accept(this);
}
sb.append(")");
}
public List<String> getFunctions() {
return List.of(sb.toString().split(","));
}
}
}
```
该程序会输出 SQL 语句中的所有函数名以及表名。需要注意的是,该程序使用了 Java 11 的 List.of 方法,如果使用的是低版本的 Java,需要将该方法替换为其他方式来创建 List 对象。
阅读全文