druid sqlparser
JsqlParser
fdb JsqlParser
package com.alibaba.druid; import java.util.List; import com.alibaba.druid.sql.SQLUtils; import com.alibaba.druid.sql.ast.SQLStatement; import com.alibaba.druid.sql.ast.statement.SQLSelect; import com.alibaba.druid.sql.ast.statement.SQLSelectItem; import com.alibaba.druid.sql.ast.statement.SQLSelectQueryBlock; import com.alibaba.druid.sql.ast.statement.SQLSelectStatement; import com.alibaba.druid.sql.parser.SQLParserUtils; import com.alibaba.druid.sql.parser.SQLStatementParser; import com.alibaba.druid.sql.visitor.SQLASTOutputVisitor; import com.alibaba.druid.util.JdbcUtils; public class ParseTest { public ParseTest() { // TODO Auto-generated constructor stub } public static void main(String[] args) { String sql = "select p, s.count as views, (select count(*) from Comments rc where rc.linkedId=p.id and rc.classcode='InfoPublishs') as commentNumber, (select count(*) from CollectIndexs rci where rci.toId=p.id and rci.classcode='InfoPublishs' and rci.type='favorite') as favorite FROM InfoPublishs p,UserScores s where p.id=s.linkedId and p.userInfo.id=s.userInfo.id and s.classCode='InfoPublishs' AND p.status=? ORDER BY p.createtime DESC"; StringBuffer select = new StringBuffer(); StringBuffer from = new StringBuffer(); StringBuffer where = new StringBuffer(); // parser得到AST SQLStatementParser parser = SQLParserUtils.createSQLStatementParser( sql, JdbcUtils.MYSQL); List<SQLStatement> stmtList = parser.parseStatementList(); // // 将AST通过visitor输出 SQLASTOutputVisitor visitor = SQLUtils.createFormatOutputVisitor(from, stmtList, JdbcUtils.MYSQL); SQLASTOutputVisitor whereVisitor = SQLUtils.createFormatOutputVisitor( where, stmtList, JdbcUtils.MYSQL); List<SQLSelectItem> items = null; for (SQLStatement stmt : stmtList) { // stmt.accept(visitor); if (stmt instanceof SQLSelectStatement) { SQLSelectStatement sstmt = (SQLSelectStatement) stmt; SQLSelect sqlselect = sstmt.getSelect(); SQLSelectQueryBlock query = (SQLSelectQueryBlock) sqlselect .getQuery(); query.getFrom().accept(visitor); query.getWhere().accept(whereVisitor); items = query.getSelectList(); } } for(SQLSelectItem s:items){ System.out.println(s.getAlias()); } System.out.println("--------------------------------"); System.out.println("from=="+from.toString()); System.out.println("select=="+select); System.out.println("where=="+where); } }
参考
http://lxy19791111.iteye.com/blog/1543223
http://my.oschina.net/taaaa/blog/74657
http://blog.csdn.net/isea533/article/details/38361911
相关推荐
Java的SQL解析器JSQLPaser是一个强大的开源库,专门设计用于处理SQL语句的解析工作。这个库允许开发者分析SQL语句的结构,提取出其中的关键元素,如列名、表名、别名以及查询条件,从而在Java应用程序中实现对SQL的...
### DIY SQL解析器:深入理解ebase及其构建过程 #### ebase:简易SQL解析器概览 ebase,作为一款简易的SQL解析器,旨在提供一个基础平台,用于理解和实践SQL命令的解析与执行。其核心功能围绕着一组操作TABLE...
本资源"SQL-使用Python开发的SQL解析器和转换器"旨在帮助开发者理解如何利用Python来解析和转换SQL语句,从而深入学习SQL的工作原理和数据库操作的底层机制。以下将详细探讨这个主题。 1. SQL基础知识: SQL是一种...
SQL解析器是数据库管理系统中的一个重要组成部分,它负责将用户输入的SQL语句转换为可执行的内部表示,以便系统能够理解和执行查询。本篇文章将深入探讨SQL解析器的工作原理、重要性以及开源工具`jsqlparser`的相关...
SQL解析器是数据库管理系统中的关键组件,它负责将用户输入的SQL语句转换为可执行的内部命令。在这个项目中,我们关注的是一个使用Flex和Bison构建的SQL解析器的完整代码。Flex是一个词法分析器生成器,而Bison则是...
SQL解析器是数据库系统中的关键组件,用于将用户输入的SQL语句转化为计算机可以理解的结构,以便执行相应的数据库操作。在C++中实现一个SQL解析器,对于初学者来说,是一个很好的学习项目,能够深入理解数据库查询...
2. 生成式编程(Generative Programming):文章中提到的“生成式编程”的概念是实现SQL解析器的关键。这种编程方法可以将解释器专用于特定输入程序,从而实现类似于编译器的效果。 3. 关系代数操作的解释器:SQL...
《ebase SQL解析器——深入理解SQL解析技术》 在信息技术领域,数据库是不可或缺的一部分,而SQL(结构化查询语言)则是与数据库交互的主要工具。本文将深入探讨一个名为ebase的开源项目,它是一个简易的SQL解析器...
在IT领域,SQL(Structured ...虽然只支持CREATE语句,但这是构建更全面SQL解析器的第一步,对于理解和扩展SQL解析器的实现具有基础性的作用。在数据库管理系统和相关开发工作中,这类工具的熟练掌握是非常有价值的。
本主题将深入探讨四个特定版本的DBMS——FashDB、MySQL 3.23.35、PostgreSQL 8.2.0以及SQLite 3.5.0,它们都依赖于特定的SQL解析器生成器来解析和理解SQL查询语句。这些解析器生成器是DBMS内部的关键部分,因为它们...
本项目"java8源码-sqlParser:使用java和antlr4的sql解析器"就是基于Java 8和ANTLR4实现的一个SQL解析器,主要用于理解和转换SQL语句。 首先,ANTLR4的工作原理是通过读取一个语法文件(通常以.g4为扩展名),生成...
《深入理解Java SQL解析器:JSQLParser》 在Java编程领域,处理SQL语句时,我们常常需要对SQL进行解析,以便理解其结构、验证语法或者转换为其他形式。JSQLParser就是一个强大的开源库,专门用于解析和操作SQL语句...
《JSQL:一款轻量级的Java SQL解析器》 在IT行业中,SQL(Structured Query Language)是数据库管理系统的标准语言,用于数据的查询、更新和管理。然而,处理SQL语句并理解其结构和逻辑是一项复杂的工作,这就需要...
"基于数据集成平台SQL解析器的研究" 本文研究的主要目的是解决大数据平台中不同类型结构化查询语言(Structured Query Language, SQL)的解析问题。随着大数据平台的快速发展,各种大数据组件和新型数据库不断出现...
3. SQL解析器的必要性与设计目标:由于文件存储GIS系统不能自动执行查询,故需要开发一个SQL解析器。该解析器能够将用户输入的查询表达式转化为标准SQL语句,并通过文件系统检索出符合查询条件的记录。 4. SQL解析...
《SQL解析器在Java 7环境中的应用与实践》 SQL(Structured Query Language)作为一种用于管理关系数据库的标准语言,其解析器在数据处理领域扮演着至关重要的角色。尤其是在Java 7这样的开发环境中,一个高效的SQL...
基于WinCE系统的内存数据库SQL解析器的分析与设计文档主要探讨了如何在WinCE嵌入式操作系统上实现一个支持SQL语言的内存数据库系统。以下从文档中提取的关键知识点进行详细说明: 1. 内存数据库与WinCE系统: 内存...
sqlparse, python的非验证SQL解析器模块 python-sqlparse-- 解析SQL语句sqlparse是 python的非验证SQL解析器模块。 安装从 pip,运行:$ pip install --upgrade sqlparse请考虑使用
在.NET开发环境中,SQL解析器、格式化工具和SQL Server Management Studio (SSMS) 插件是提升数据库操作效率和代码质量的重要工具。本文将详细探讨这些知识点,并以".NET SQL解析器和格式化工具和SSMS插件-源码"为例...
ANTLR4(ANother Tool for Language Recognition)是一款强大的解析器生成器,广泛...对于想要深入理解SQL解析、Spark和Flink的工作原理,以及如何构建跨平台的SQL解析工具的开发者来说,这是一个非常有价值的资源。