单句SQL语句的解析方案
2009-02-05 10:20:54 来源:WEB开发网数据是程序处理的主要内容,它一般存储在关系型数据库中,要操作它们最终必须要通过SQL语句来完成,因此,解读分析和处理SQL语句成为程序员的基本工作内容之一,当然有时这项任务是比较乏味的,如果让计算机来完成一些基本的分析解读工作如找出SQL语句涉及了哪些表,字段和条件等,可以帮助程序员解放出部分精力,投入到更有挑战性和复杂性的任务中去,本文将就如何解析单句SQL语句提出自己的解决方案和大家探讨,希望大家不吝批评指正。
首先说明以下单句SQL的范畴,它是指不存在嵌套的SQL语句,包括Select,insert,delete,update四大类型(具体的解析子类还有一种insert select类型),其中以select最为复杂,下面将以它为例。另关于嵌套SQL尤其是多重嵌套SQL的分析似乎比较复杂,我一时没想出好的解决方案,如果您知道请不吝赐教。
1.关于SQL语句的预处理。
在对sql语句进行分析之前,有必要对它进行一些预处理,这样能减轻不少后面编程的负担。
预处理的主要工作是消除SQL语句前后的空白,将其中的连续空白字符(包括空格,TAB和回车换行)替换成单个空格;将sql语句全变成小写形式(或大写形式);在SQL语句的尾后加上结束符号,至于为什么加,这里先买个关子。具体的语句如下:
sql=sql.trim();
sql=sql.toLowerCase();
sql=sql.replaceAll("s+", " ");
sql=""+sql+" ENDOFSQL";
2.将SQL语句分离成片段。
经过第一步的工作,一个多行的,存在大小写混杂的SQL语句已经变成了单行的小写SQL语句,接下来我们需要把整句分离成更小的片段。以Select语句为例,其中可能存在有select子句部分,from子句部分,where子句部分,group by子句和order by子句等,如果能成功的把整句分离成这些子句,我们的分析工作又前进了一步。先让我们看看下面的SQL示例:
更多精彩
赞助商链接