`

分享一个java sql解析器--General SQL Parser for Java

 
阅读更多

    使用这个工具是因为我做一个工具想根据sql语句取得使用的列名,再根据列名生成vo的field,使用正则是不行的,只能用一个sql解析器来做,但看了几个开源的,如zql,JSqlParser,不是文档做得太烂,就是功能有限,zql对于oracle的函数无法识别,于是就试了一下商业版的General SQL Parser for Java,它也有针对.net版的。下载之日起可试用90天,它可解析出列、列的别名、表名,demo做得也不错,找个demo下来改改就可以达到自己的目的。如这样的sql:

 SELECT
   NVL(SUM(MISSIONNO), 0) DISTCNT, COUNT(DISTINCT(USERID)) USERIDCNT
  FROM EVTSUPPLYHIST
 WHERE EVTCODE = #evtCode#
   AND EVTNO = #evtNo#
   AND GIFTCODE = #giftCode#
   AND SUPPLYDT BETWEEN TO_DATE(#startDate#, 'YYYY/MM/DD HH24:MI:SS') 
   AND TO_DATE(#endDate#, 'YYYY/MM/DD HH24:MI:SS')

 

   注意它还含有ibatis的参数标记#,是否能工作呢?写下面的代码看看能否得到:

 

  TGSqlParser sqlparser = new TGSqlParser(EDbVendor.dbvoracle);
        sqlparser.sqltext = " SELECT\n" +
                "   NVL(SUM(MISSIONNO), 0) DISTCNT, COUNT(DISTINCT(USERID)) USERIDCNT\n" +
                "  FROM EVTSUPPLYHIST\n" +
                " WHERE EVTCODE = #evtCode#\n" +
                "   AND EVTNO = #evtNo#\n" +
                "   AND GIFTCODE = #giftCode#\n" +
                "   AND SUPPLYDT BETWEEN TO_DATE(#startDate#, 'YYYY/MM/DD HH24:MI:SS') \n" +
                "   AND TO_DATE(#endDate#, 'YYYY/MM/DD HH24:MI:SS')";
        int ret = sqlparser.parse();
        if (ret == 0) {
            TSelectSqlStatement select = (TSelectSqlStatement) sqlparser.sqlstatements.get(0);
            TResultColumnList columnList = select.getResultColumnList();
            for (int i = 0; i < columnList.size(); i++) {
                TResultColumn col = columnList.getResultColumn(i);
                if (col.getAliasClause() != null) { //别名列
                    System.out.println(col.getAliasClause().toString());
                } else { //正常列
                    System.out.println(col.getExpr().toString());
                }
            }
        } else {
            log.error(sqlparser.getErrormessage());
        }

 

  运行一下,结果正常地得到了两列,即使含有#这样的标记。官方主页:http://www.sqlparser.com/

分享到:
评论
1 楼 SHENXIAOHAI7946 2014-09-22  
你好,想问下这个sql语法分析器有没有破解版的免费的,谢谢。

相关推荐

    sql-parser-master.zip_Parser_SQL parser

    在"sql-parser-master.zip"这个压缩包中,我们很可能是得到了一个名为"Parser_SQL parser"的项目源码,它是一个SQL解析器的模拟实现。这个解析器可能用于分析、验证和转化SQL查询,以便于执行。 SQL解析器的工作...

    javaParser 包 javaparser-core-3.6.16.jar

    JavaParser 是一个强大的开源库,专门用于解析、分析和修改 Java 源代码。这个工具在 Java 开发中尤其有用,因为它允许程序员在运行时或构建过程中动态处理和操作 Java 代码。`javaparser-core-3.6.16.jar` 文件是 ...

    java的sql解析器jsqlparser

    Java的SQL解析器JSQLPaser是一个强大的开源库,专门设计用于处理SQL语句的解析工作。这个库允许开发者分析SQL语句的结构,提取出其中的关键元素,如列名、表名、别名以及查询条件,从而在Java应用程序中实现对SQL的...

    dt-sql-parser:使用antlr4构建的BigData SQL解析器

    dt-sql-parser English |dt-sql-parser是使用构建的SQL Parser项目,主要用于BigData域。 生成了基本的Parser,Visitor和Listener,因此很容易完成语法验证, tokenizer ,遍历AST等功能。 此外,它提供了一些辅助...

    java8源码-sqlParser:使用java antlr4的sql解析器

    本项目"java8源码-sqlParser:使用java和antlr4的sql解析器"就是基于Java 8和ANTLR4实现的一个SQL解析器,主要用于理解和转换SQL语句。 首先,ANTLR4的工作原理是通过读取一个语法文件(通常以.g4为扩展名),生成...

    通用SQL语句解析类SqlParser(JAVA版)

    项目中已使用的一个比较简单的SQL语句查询字段解析工具类

    ua-parser-1.3.0.jar

    cd /app/ua-parser-master/java vi pom.xml &lt;version&gt;1.3.0&lt;/version&gt; 原来是&lt;version&gt;1.3.1-SNAPSHOT mvn package -DskipTests mvn install:install-file -Dfile="/app/ua-parser-master/java/target/ua-parser-...

    javaparser-1.0.8-src.zip

    这个"javaparser-1.0.8-src.zip"文件是一个包含JavaParser源代码的压缩包,版本为1.0.8。在本文中,我们将深入探讨JavaParser的功能、用途以及如何使用其源代码。 **JavaParser的功能与用途** 1. **语法解析**:...

    sql-parser:Java 7 上的 SQL 解析器

    1. JSqlParser:这是一个用Java编写的完全Java SQL解析器,能够解析SQL92、SQL99和SQL2003标准。开发者可以通过API直接访问解析后的AST,进行自定义处理,如SQL改写、权限控制等。 2. ANTLR:ANTLR是一个强大的解析...

    js-sql-parser:用jison编写SQL(select)解析器。 将SQL解析为抽象语法树(AST),然后字符串化回SQL。 sql语法遵循https:dev.mysql.comdocrefman5.7enselect.html

    js-sql-parser 在js中解析/字符串化sql(选择语法)。 sql语法遵循新闻自v1.3.0 起修复bug tableFactor别名从v1.2.2开始,增加了对“`”引号别名的支持 BUG修复字符串化的关键字having自V1.2.1。 自v1.2.0起,错字...

    java8源码-sqlParser:使用java和antlr4的sql解析器

    java8 源码 sql parser 描述 1.基于 Java8,利用 Antlr4 实现对 sql 的解析并生成解析树 2.基于解析树生成执行计划 3.基于执行计划,对 Java 内存中数据进行操作,对用户透明,并实现部分 sql 执行 4.Java 内存数据...

    sql-parser-master.zip_AKS

    本项目"sql-parser-master.zip_AKS"涉及到一个特定的SQL解析器实现,可能是用于PHP环境中的,与名为"AKS"的框架相结合。 首先,让我们深入了解SQL解析器。SQL解析器通常由两部分组成:词法分析器和语法分析器。词法...

    scala-parser-combinators-2.11-1.0.4-API文档-中文版.zip

    赠送jar包:scala-parser-combinators_2.11-1.0.4.jar; 赠送原API文档:scala-parser-combinators_2.11-1.0.4-javadoc.jar; 赠送源代码:scala-parser-combinators_2.11-1.0.4-sources.jar; 赠送Maven依赖信息...

    JavaParser-JUG-Milano 高清 目录 书签

    JavaParser 是一个强大的开源库,主要用于解析、修改和生成Java源代码。这个工具在软件开发领域,特别是对那些需要处理大量Java源代码的项目中,非常有用。JUG(Java User Group)是全球各地Java爱好者自发组织的...

    scala-parser-combinators_2.12-1.1.0-API文档-中英对照版.zip

    赠送jar包:scala-parser-combinators_2.12-1.1.0.jar; 赠送原API文档:scala-parser-combinators_2.12-1.1.0-javadoc.jar; 赠送源代码:scala-parser-combinators_2.12-1.1.0-sources.jar; 赠送Maven依赖信息...

    sql-parser-master.zip

    "sql-parser-master.zip" 提供的可能是一个SQL解析器的源代码库,通常这样的项目用于解析SQL语句,将其转化为可执行的结构或用于其他数据库相关的应用开发。 在SQL解析器中,以下是一些核心知识点: 1. **语法分析...

    SqlParser C++实现的SQL语法解释器

    总之,SqlParser C++实现的SQL语法解释器是一个强大的工具,它通过词法分析和语法分析解析SQL语句,为数据库操作提供了基础。理解和掌握SqlParser的工作原理,对于开发和维护与数据库相关的软件系统具有重要意义。

    java的sql解析器jsqlparser.zip

    《深入理解Java SQL解析器:JSQLParser》 在Java编程领域,处理SQL语句时,我们常常需要对SQL进行解析,以便理解其结构、验证语法或者转换为其他形式。JSQLParser就是一个强大的开源库,专门用于解析和操作SQL语句...

    antlr-java-parser-1.0.5.zip

    在"antlr-java-parser-1.0.5.zip"这个开源项目中,我们可以推测这是一个基于ANTLR的Java解析器的版本1.0.5。ANTLR通常用于创建语言解析器,这里的"java-parser"部分暗示了它是用来解析Java源代码的。这样的工具对于...

    pull-parser-2.jar 工具類

    `pull-parser-2.jar`工具类库就是这样一个专门针对XML和JSON解析的利器,它为开发者提供了便捷、高效的解析方式,极大地优化了数据处理的流程。 XML(Extensible Markup Language)和JSON(JavaScript Object ...

Global site tag (gtag.js) - Google Analytics