`
m635674608
  • 浏览: 5041723 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

sql 解析器

 
阅读更多

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解析器jsqlparser

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

    DIY SQL解析器

    ### DIY SQL解析器:深入理解ebase及其构建过程 #### ebase:简易SQL解析器概览 ebase,作为一款简易的SQL解析器,旨在提供一个基础平台,用于理解和实践SQL命令的解析与执行。其核心功能围绕着一组操作TABLE...

    SQL-使用Python开发的SQL解析器和转换器.zip

    本资源"SQL-使用Python开发的SQL解析器和转换器"旨在帮助开发者理解如何利用Python来解析和转换SQL语句,从而深入学习SQL的工作原理和数据库操作的底层机制。以下将详细探讨这个主题。 1. SQL基础知识: SQL是一种...

    sql解析器

    SQL解析器是数据库管理系统中的一个重要组成部分,它负责将用户输入的SQL语句转换为可执行的内部表示,以便系统能够理解和执行查询。本篇文章将深入探讨SQL解析器的工作原理、重要性以及开源工具`jsqlparser`的相关...

    //-SQL解析器完整代码-//

    SQL解析器是数据库管理系统中的关键组件,它负责将用户输入的SQL语句转换为可执行的内部命令。在这个项目中,我们关注的是一个使用Flex和Bison构建的SQL解析器的完整代码。Flex是一个词法分析器生成器,而Bison则是...

    sql解析器代码

    SQL解析器是数据库系统中的关键组件,用于将用户输入的SQL语句转化为计算机可以理解的结构,以便执行相应的数据库操作。在C++中实现一个SQL解析器,对于初学者来说,是一个很好的学习项目,能够深入理解数据库查询...

    用500行scala代码实现sql解析器(英文版)

    2. 生成式编程(Generative Programming):文章中提到的“生成式编程”的概念是实现SQL解析器的关键。这种编程方法可以将解释器专用于特定输入程序,从而实现类似于编译器的效果。 3. 关系代数操作的解释器:SQL...

    ebase SQL解析器-1

    《ebase SQL解析器——深入理解SQL解析技术》 在信息技术领域,数据库是不可或缺的一部分,而SQL(结构化查询语言)则是与数据库交互的主要工具。本文将深入探讨一个名为ebase的开源项目,它是一个简易的SQL解析器...

    使用Lemon制作的最简的SQL解析器

    在IT领域,SQL(Structured ...虽然只支持CREATE语句,但这是构建更全面SQL解析器的第一步,对于理解和扩展SQL解析器的实现具有基础性的作用。在数据库管理系统和相关开发工作中,这类工具的熟练掌握是非常有价值的。

    FashDB、mysql-3.23.35、PostgreSQL 8.2.0、sqlite-3.5.0所使用的SQL解析器生成器分析

    本主题将深入探讨四个特定版本的DBMS——FashDB、MySQL 3.23.35、PostgreSQL 8.2.0以及SQLite 3.5.0,它们都依赖于特定的SQL解析器生成器来解析和理解SQL查询语句。这些解析器生成器是DBMS内部的关键部分,因为它们...

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

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

    java的sql解析器jsqlparser.zip

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

    JSQL.rar_fortycqi_jSQL_jSQL下载_sql解析器_toucha9a

    《JSQL:一款轻量级的Java SQL解析器》 在IT行业中,SQL(Structured Query Language)是数据库管理系统的标准语言,用于数据的查询、更新和管理。然而,处理SQL语句并理解其结构和逻辑是一项复杂的工作,这就需要...

    基于数据集成平台SQL解析器的研究 (1).pdf

    "基于数据集成平台SQL解析器的研究" 本文研究的主要目的是解决大数据平台中不同类型结构化查询语言(Structured Query Language, SQL)的解析问题。随着大数据平台的快速发展,各种大数据组件和新型数据库不断出现...

    基于文件存储GIS的SQL解析器的设计与实现.pdf

    3. SQL解析器的必要性与设计目标:由于文件存储GIS系统不能自动执行查询,故需要开发一个SQL解析器。该解析器能够将用户输入的查询表达式转化为标准SQL语句,并通过文件系统检索出符合查询条件的记录。 4. SQL解析...

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

    《SQL解析器在Java 7环境中的应用与实践》 SQL(Structured Query Language)作为一种用于管理关系数据库的标准语言,其解析器在数据处理领域扮演着至关重要的角色。尤其是在Java 7这样的开发环境中,一个高效的SQL...

    基于Win CE系统的内存数据库SQL解析器的分析与设计.pdf

    基于WinCE系统的内存数据库SQL解析器的分析与设计文档主要探讨了如何在WinCE嵌入式操作系统上实现一个支持SQL语言的内存数据库系统。以下从文档中提取的关键知识点进行详细说明: 1. 内存数据库与WinCE系统: 内存...

    sqlparse, python的非验证SQL解析器模块.zip

    sqlparse, python的非验证SQL解析器模块 python-sqlparse-- 解析SQL语句sqlparse是 python的非验证SQL解析器模块。 安装从 pip,运行:$ pip install --upgrade sqlparse请考虑使用

    .NET SQL解析器和格式化工具和SSMS插件

    在.NET开发环境中,SQL解析器、格式化工具和SQL Server Management Studio (SSMS) 插件是提升数据库操作效率和代码质量的重要工具。本文将详细探讨这些知识点,并以".NET SQL解析器和格式化工具和SSMS插件-源码"为例...

    基于antlr4 解析器,支持spark sql, tidb sql, flink sql, Sparkflink运行命令解析器

    ANTLR4(ANother Tool for Language Recognition)是一款强大的解析器生成器,广泛...对于想要深入理解SQL解析、Spark和Flink的工作原理,以及如何构建跨平台的SQL解析工具的开发者来说,这是一个非常有价值的资源。

Global site tag (gtag.js) - Google Analytics