zoukankan      html  css  js  c++  java
  • 从sql中获取表名

     <dependency>
            <groupId>com.github.jsqlparser</groupId>
            <artifactId>jsqlparser</artifactId>
            <version>0.9</version>
    </dependency>
    import java.io.StringReader;
    import java.util.List;
    
    import net.sf.jsqlparser.parser.CCJSqlParserManager;
    import net.sf.jsqlparser.statement.Statement;
    import net.sf.jsqlparser.statement.delete.Delete;
    import net.sf.jsqlparser.statement.insert.Insert;
    import net.sf.jsqlparser.statement.replace.Replace;
    import net.sf.jsqlparser.statement.select.Select;
    import net.sf.jsqlparser.statement.update.Update;
    import net.sf.jsqlparser.util.TablesNamesFinder;
    
    
    public class DataPermissionSqlUtil {
    
        
        private static CCJSqlParserManager pm = new CCJSqlParserManager();
        
    
        
        /**
         *  detect table names from given table 
         *  ATTENTION : WE WILL SKIP SCALAR SUBQUERY IN PROJECTION CLAUSE 
         * */
        private static List<String> getTableNames(String sql) throws Exception {
            List<String> tablenames = null;
            TablesNamesFinder tablesNamesFinder = new TablesNamesFinder();
            Statement statement = pm.parse(new StringReader(sql));
            if (statement instanceof Select) {
                tablenames = tablesNamesFinder.getTableList((Select) statement);
            } else if (statement instanceof Update) {
                return null;
            } else if (statement instanceof Delete) {
                return null;
            } else if (statement instanceof Replace) {
                return null;
            } else if (statement instanceof Insert) {
                return null;
            }
            return tablenames;
        }
        public static void main(String[] args) {
            String sql = " select d.* from (SELECT qt.qt_org_id as orgId,qt.qt_owner_id as ownerId,own.OWN_NAME as ownerName, mat.mat_barcode as matBarcode, mat.MAT_CODE as matCode, mat.MAT_NAME as matName, "
                    + " m.avgDailyOutboundQty as avgDailyOutboundQty, sum(qt.QT_ONHAND_QTY) availableQty"
                    + " from riv_quant qt "
                    + " right join (select ONH_OWNER_ID as ownId, chl.CHL_MATERIAL_ID as matId"
                    + " from riv_check_l chl "
                    + " INNER JOIN riv_outbound_notice_h onh on onh.ONH_ID = chl.CHL_ONH_ID "
                    + "  where onh.onh_status = 90  "
                    + " GROUP BY chl.CHL_MATERIAL_ID) m on m.matId = qt.QT_MATERIAL_ID "
                    + " INNER JOIN riv_owner own on own.OWN_ID = qt.QT_OWNER_ID "
                    + " inner join riv_material mat on mat.mat_id = qt.QT_MATERIAL_ID "
                    + " GROUP BY m.ownId, m.matId) d ";
            try {
                List<String> tablenames = getTableNames(sql);
                System.out.println(tablenames);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
        
    }
    [riv_quant, riv_check_l, riv_outbound_notice_h, riv_owner, riv_material]
  • 相关阅读:
    在 Java SE 6 中监视和诊断性能问题
    Codeforces Round #491 (Div. 2)部分题解
    BZOJ1607: [Usaco2008 Dec]Patting Heads 轻拍牛头(模拟 调和级数)
    BZOj1261: [SCOI2006]zh_tree(dp)
    BZOJ1569: [JSOI2008]Blue Mary的职员分配(dp 暴力)
    BZOJ4300: 绝世好题(dp)
    树上莫队算法
    SPOJ COT2
    BZOJ1086: [SCOI2005]王室联邦(贪心,分块?)
    Educational Codeforces Round 42 (Rated for Div. 2)
  • 原文地址:https://www.cnblogs.com/tonggc1668/p/6992902.html
Copyright © 2011-2022 走看看