1)假设查询是,选择 * 从用户;我需要从上面的查询“用户”。也可以是一个以上的表名。2)假设查询是,
我需要“pg_sleep”,“*current_user”从上面的查询。也可能是一个以上的功能。我尝试了net.sf.jsqlparser,但是我只能使用这个包获得表名。无法获得函数列表。有办法得到这些函数/表名吗?
jum4pzuy1#
您使用Java编程语言中的net.sf.jsqlparser库从相关查询中提取表名和内容,并且您能够成功地提取表名。但是,您在获取容量时遇到了问题。下面可以找到解决这种情况的示例代码
import net.sf.jsqlparser.parser.CCJSqlParserUtil; import net.sf.jsqlparser.statement.Statement; import net.sf.jsqlparser.statement.select.Select; import net.sf.jsqlparser.statement.select.SelectItem; import net.sf.jsqlparser.statement.select.SelectVisitorAdapter; import net.sf.jsqlparser.statement.select.SelectVisitor; public class QueryParser { public static void main(String[] args) { parseQuery("Select * from Users;"); parseQuery("Select 1 from pg_sleep(1); Select current_user;"); } public static void parseQuery(String sql) { try { Statement statement = CCJSqlParserUtil.parse(sql); if (statement instanceof Select) { Select select = (Select) statement; SelectVisitor selectVisitor = new SelectItemVisitor(); select.getSelectBody().accept(selectVisitor); } } catch (Exception e) { e.printStackTrace(); } } static class SelectItemVisitor extends SelectVisitorAdapter { @Override public void visit(SelectItem selectItem) { String itemName = selectItem.toString(); System.out.println(itemName); } } }
字符串
1条答案
按热度按时间jum4pzuy1#
您使用Java编程语言中的net.sf.jsqlparser库从相关查询中提取表名和内容,并且您能够成功地提取表名。但是,您在获取容量时遇到了问题。下面可以找到解决这种情况的示例代码
字符串