`

【java】对sql语句进行解析。

    博客分类:
  • java
 
阅读更多
因为在项目中需要对sql进行解析,那么所以业务逻辑比较复杂。
然后就有了以下的代码。 
有部分注释。大家可以勉强看看。
package com.duduli.li;

import java.util.HashMap;
import java.util.IdentityHashMap;
import java.util.Iterator;
import java.util.Map;

public class ParseSql {

	
//	解析用户发送sql语句,获得用户所查询的表。以及获得所需要的列
	public void parserSQL(String sql){
//		mapTable获得表名和别名的一个map
		Map mapTable = new HashMap();
		String tableName ;
//		select p.name,o.officedesc from person as p,office as o where p.officeID=o.id
//		select * from person
		if(sql.contains("as")){
//			System.out.println("1:"+sql.substring(sql.indexOf("from")+4,sql.indexOf("where")).trim());
			
			String s = sql.substring(sql.indexOf("from")+4,sql.indexOf("where")).trim();
			String str[] = s.split(",");
			for(String st:str){
//				string数组为获得表,map存表和简写对应关系
				mapTable.put(st.substring(st.indexOf("as")+2, st.length()).trim(),st.substring(0, st.indexOf("as")-1));
//				System.out.println("get the table: "+st.substring(0,st.indexOf("as")-1));
			}
		}else{
//			System.out.println(sql.substring(sql.indexOf("from")+4,sql.length()).trim());
			tableName = sql.substring(sql.indexOf("from")+4,sql.length()).trim();
			System.out.println("表名:"+tableName);
		}
		
//		System.out.println("table size is : "+mapTable.size());
		
		
		Iterator it = mapTable.entrySet().iterator(); 
			while(it.hasNext()){ 
			    Map.Entry m=(Map.Entry)it.next(); 
			    System.out.println(m.getKey()+"    "+m.getValue());
			} 
		
//		解析sql语句中所含有的列名
//		select p.*,o.officedesc from person as p,office as o where p.officeID=o.id
//		if(sql.contains("*")){
//			System.out.println(sql.substring(sql.indexOf("select")+6,sql.indexOf("from")).trim());
			if(sql.contains(".")){
				String tableMsg = sql.substring(sql.indexOf("select")+6,sql.indexOf("from")).trim();
				String s [] = tableMsg.split(",");
//				mapColumns获得表别名和所需要的列名,使用IdentityHashMap的方法,对于有重复的KEY进行处理。
//				如果采用hashmap会对其进行覆盖。
				Map mapColumns = new IdentityHashMap();
				for(String s1:s){
					System.out.println("000000");
					mapColumns.put(s1.substring(0, s1.indexOf(".")), s1.substring(s1.indexOf(".")+1,s1.length()));
				}
				System.out.println(mapColumns);
//				System.out.println("columns size : " + mapColumns.size());
				/*for(Object obj : mapColumns.keySet()){
			          Object value = mapColumns.get(obj );
			          System.out.println("values:"+value);
			    }*/
				
				/*for(Map.Entry entry:mapColumns.entrySet()){
					System.out.println(entry.getKey()+"="+entry.getValue());
					}*/
				
				System.out.println(mapColumns.size());
				Iterator iterator = mapColumns.entrySet().iterator(); 
					while(iterator.hasNext()){ 
				    Map.Entry m=(Map.Entry)iterator.next(); 
				    System.out.println("table :"+mapTable.get(m.getKey()));
//				    System.out.println(m.getKey()+"    "+m.getValue());
				    System.out.println("columns:"+m.getValue());
				   } 
			}
//		}else{
//			System.out.println(sql.substring(sql.indexOf("select")+6,sql.indexOf("from")).trim());
//			
//		}
		
		
	}
	public static void main(String[] args) {
//		new ParseSql().parserSQL("select p.name,o.officedesc from person as p,office as o where p.officeID=o.id");
//		new ParseSql().parserSQL("select * from person");
//		System.out.println("---------");
		new ParseSql().parserSQL("select p.id,p.file,p.name,o.officedesc from person as p,office as o where p.officeID=o.id");
		
	}
}
分享到:
评论

相关推荐

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

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

    java执行SQL语句实现查询的通用方法详解

    PreparedStatement对象可以重用,减少了SQL语句的解析时间。 在executeQuery()方法中,使用PreparedStatement来执行SQL语句,并将查询结果放入Vector容器中。 五、ResultSet详解 ResultSet是Java执行SQL语句实现...

    java的sql解析器jsqlparser

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

    通过解析sql语句获取表血缘关系项目

    1. **SQL语句解析**:SQL(Structured Query Language)是用于管理和处理关系型数据库的标准语言。解析SQL语句是指将人类可读的SQL命令转化为计算机可执行的指令。这一过程通常由数据库管理系统(DBMS)完成,但开发者...

    JsonSQL:用SQL语句解析JSON文件

    **JsonSQL: SQL语句解析JSON文件** 在大数据处理和Web应用中,JSON(JavaScript Object Notation)格式已经成为数据交换的常见格式。然而,对于习惯使用SQL查询关系型数据库的人来说,处理JSON数据可能会觉得不太...

    java版本的SQL语句解析源代码,包含demo(zql)

    SQL语句解析java包,含源代码: SELECT ANTIQUEOWNERS.OWNERLASTNAME, ANTIQUEOWNERS.OWNERFIRSTNAME FROM ANTIQUEOWNERS, ANTIQUES WHERE ANTIQUES.BUYERID = ANTIQUEOWNERS.OWNERID AND ANTIQUES.ITEM = 'Chair'; ...

    java检查sql语法是否正确

    在Java中,ANTLR常被用来解析SQL语句,生成抽象语法树(AST),从而可以进行语法检查。`antlr-2.7.6rc1.jar`是ANTLR的一个版本,包含了必要的类库,可以生成解析SQL语法所需的解析器。 `commons-lang.jar`是Apache ...

    Java 使用注解拼接SQL语句

    "Java使用注解拼接SQL语句"是一个常见的实践,它使得动态构建SQL查询变得更为简洁和可维护。这种技术通常与ORM(对象关系映射)框架如MyBatis或Hibernate结合使用,但也可以通过自定义处理逻辑实现。 1. **自定义...

    Apache的java解析sql工具包

    它提供了丰富的API,允许开发者对SQL语句进行深度解析,如访问查询中的表名、列名、条件表达式等元素。通过这些API,我们可以构建复杂的SQL操作逻辑,例如动态生成SQL、修改SQL结构或者提取查询信息。 使用...

    sql语句中用问号代替参数

    在SQL语句中,使用问号(`?`)作为参数占位符是一种常见的做法,尤其是在编程语言如Java中与数据库交互时。这种方式被称为预编译语句或参数化查询,它具有重要的安全性和性能优势。 ### SQL参数化查询的概念 参数化...

    Java解析SQL的基本思路.pdf

    Java解析SQL的基本思路是指使用Java语言对SQL语句进行解析和执行的过程。该过程通常涉及到两个主要步骤:分词和解析。在分词步骤中,Java程序会将输入的SQL语句分解为多个标记(tokens),以便于后续的解析和执行。...

    antlr解析sql

    虽然当前实现仅涵盖了查询语句,但设计时已经考虑到了扩展性,预留了对UPDATE、DELETE、INSERT等其他SQL语句的支持。 ANTLR的工作原理基于上下文无关语法(Context-Free Grammar,CFG),它允许开发者定义一套语法...

    Java Sql 格式化工具

    用户可以通过运行这个jar包来对SQL语句进行格式化操作。只需输入待格式化的SQL文本,工具就会返回格式化后的结果。 2. **Demo.java**:这是一个Java源代码文件,可能是用于演示如何使用SQLinForm.jar的示例。开发者...

    java批量执行SQL

    在Java开发过程中,经常需要与数据库进行交互,尤其是在处理大量数据时,如何高效地执行SQL语句变得尤为重要。本文将详细介绍如何利用Java进行批量SQL执行,包括其背景、实现原理、代码示例及优化策略等。 #### 一...

    基于Druid的SqlParser模块解析create table语句创建java POJO和DAO类的效率工具.zip

    它基于词法分析和语法分析的原理,将SQL语句转换为抽象语法树(AST),从而方便对SQL进行深度处理。通过这个模块,开发者可以轻松获取SQL的结构信息,例如表名、字段名、数据类型等,这对于自动化代码生成非常有帮助...

    基于SQL 语法解释器JSqlParser实现的SQL解析工具

    JSqlParser允许开发者对SQL语句进行深度解析,将其转换为抽象语法树(AST,Abstract Syntax Tree),这样就可以方便地遍历和修改SQL结构。这个工具对于那些需要动态构建SQL、验证SQL语法或者进行SQL优化的应用非常...

    JSqlParser开源SQL解析库jar

    JSqlParser是一个用Java编写的开源SQL解析库,它可以解析SQL语句并生成抽象语法树(AST),也可以根据...使用JSqlParser,你可以解析诸如SELECT、INSERT、UPDATE、DELETE等各种SQL语句,并对其内容进行详细的控制和操作。

    java 代码生成器 能自动生成sql语句和dao

    Java代码生成器是一种工具,它能够自动化创建Java代码,特别是针对数据访问层(DAO)的操作以及对应的SQL语句。这种工具极大地提高了开发效率,减少了手动编写这些基础代码的时间,使得开发者可以更专注于业务逻辑和...

    java读取数据库表中内容转存sql文件,然后解析执行此文件

    这项操作可能涉及到数据库连接、数据查询、文件操作以及SQL语句的构建与执行。以下将详细介绍这个过程的各个环节。 1. **数据库连接**:在Java中,我们可以使用JDBC(Java Database Connectivity)来连接数据库。...

Global site tag (gtag.js) - Google Analytics