如何使用java从postgresql查询中获取表名/函数

ctehm74n  于 5个月前  发布在  PostgreSQL
关注(0)|答案(1)|浏览(63)

1)假设查询是,
选择 * 从用户;
我需要从上面的查询“用户”。也可以是一个以上的表名。
2)假设查询是,

  • 从pg_sleep(1)中选择1;
  • 选择当前用户;

我需要“pg_sleep”,“*current_user”从上面的查询。也可能是一个以上的功能。
我尝试了net.sf.jsqlparser,但是我只能使用这个包获得表名。无法获得函数列表。
有办法得到这些函数/表名吗?

jum4pzuy

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);
            }
        }
    }

字符串

相关问题