2021-05-17

import gudusoft.gsqlparser.EDbVendor;
import gudusoft.gsqlparser.TCustomSqlStatement;
import gudusoft.gsqlparser.TGSqlParser;
import gudusoft.gsqlparser.nodes.TObjectName;
import gudusoft.gsqlparser.nodes.TTable;
import gudusoft.gsqlparser.stmt.TInsertSqlStatement;

import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.InputStreamReader;

public class columnTableStmt {

    public static void main(String args[])
     {

//        if (args.length != 1){
//            System.out.println("Usage: java columnTableStmt sqlfile.sql");
//            return;
//        }
//        File file=new File(args[0]);
//        if (!file.exists()){
//            System.out.println("File not exists:"+args[0]);
//            return;
//        }

         //1: dbvmssql,2: dbvoracle, 3: dbvmysql,  dbvaccess, dbvgeneric, 4: dbvdb2,
         // dbvsybase,dbvinformix, 5: dbvpostgresql,dbvfirebird,dbvmdx, 6: dbvteradata

        EDbVendor dbVendor = EDbVendor.dbvmssql;
        String msg = "Please select SQL dialect: 1: SQL Server, 2: Oralce, 3: MySQL, 4: DB2, 5: PostGRESQL, 6: Teradta, default is 1: SQL Server";
        System.out.println(msg);

        BufferedReader br=new   BufferedReader(new InputStreamReader(System.in));
        try{
            int db = Integer.parseInt(br.readLine());
            if (db == 1){
                dbVendor = EDbVendor.dbvmssql;
            }else if(db == 2){
                dbVendor = EDbVendor.dbvoracle;
            }else if(db == 3){
                dbVendor = EDbVendor.dbvmysql;
            }else if(db == 4){
                dbVendor = EDbVendor.dbvdb2;
            }else if(db == 5){
                dbVendor = EDbVendor.dbvpostgresql;
            }else if(db == 6){
                dbVendor = EDbVendor.dbvteradata;
            }
        }catch(IOException i) {
        }catch (NumberFormatException numberFormatException){
        }

        System.out.println("Selected SQL dialect: "+dbVendor.toString());


        TGSqlParser sqlparser = new TGSqlParser(dbVendor);
//        sqlparser.sqlfilename  = "C:\\Users\\xiang.chen\\springaoptest\\src\\main\\resources\\sql.txt";

         sqlparser.sqltext = "insert into t_audit(id, name) values ('aaa', 'www')";

        int ret = sqlparser.parse();
        if (ret == 0){
            for(int i=0;i<sqlparser.sqlstatements.size();i++){
                iterateStmt(sqlparser.sqlstatements.get(i));
            }
        }else{
            System.out.println(sqlparser.getErrormessage());
        }
     }

    protected static void iterateStmt(TCustomSqlStatement stmt){
        TInsertSqlStatement psi =  (TInsertSqlStatement)stmt;
       // System.out.println(stmt.sqlstatementtype.toString());
        System.out.println(psi.getValues().getMultiTarget(0).getColumnList().getResultColumn(0));
        for(int i=0;i<stmt.tables.size();i++){
            TTable table = stmt.tables.getTable(i);
            String table_name = table.getName();
            System.out.println("Analyzing: "+ table_name +" <- "+ stmt.sqlstatementtype);
            for (int j=0; j < table.getLinkedColumns().size(); j++) {
              TObjectName objectName = table.getLinkedColumns().getObjectName(j);
              String column_name = table_name +"."+ objectName.getColumnNameOnly().toLowerCase();
              if (!objectName.isTableDetermined()) {
                 column_name = "?."+ objectName.getColumnNameOnly().toLowerCase();
              }
              System.out.println("Analyzing: "+ column_name +" in "+ stmt.sqlstatementtype +" "+ objectName.getLocation());
            }
        }

        for (int i=0;i<stmt.getStatements().size();i++){
           iterateStmt(stmt.getStatements().get(i));
        }

    }

}

 

https://github.com/zjplus/gsp_demo

 

 

https://www.sqlparser.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值