上面的问题是我在做一个DAO源代码生成器碰到的,因为根据一个任意的SQL生成DAO源码时,我需要知道每个参数,也就是每个问号(?)所对应的类型,我是通过ResultSetMetaData获取字段类型的,所以需要知道每个参数是哪个表的哪个字段请各位大大们指点指点!分我有的是。
解决方案 »
- java 怎么判断系统是否安装了数据库
- 网页乱码?
- 求助:Spring AOP 日志管理
- struts+hibernate+ajax 仿google所搜问题
- 哪位大哥有spring+dwr安全校验解决策略或者源码
- 请教大家一个关于web.xml的问题。
- 谁有tapestry3.3.0框架或它的下载地址?提供者给100分!!
- HIBERNATE 的问题,,知道另外一个表的ID ,求出该表的NAME字段,可以在HBM。XML里配置得到吗
- android开发 蓝牙自动配对 不出现配对请求提示框
- 请问高手,sitemesh可以修饰ZK中.zul吗,怎么能实现呢
- 配置wiring时,出现的问题,请教一下已经配置成功的高手
- 如何在jsp中连接到oracle的数据库
不行滴吧
http://community.csdn.net/Expert/topic/4103/4103537.xml?temp=.9501764
http://www.china-pub.com/computers/ebook20001-25000/21497/ch03.rar这两个分别是java的关于一元算式的分析器代码和简单语句解释器的代码的讲解
研究明白了它你就找到了解决你问题的思路了,我下了,但忙,没看,所以,嘿嘿...
由于可能存在
select a.col1,a.col2 ...
from (select ... from b where col=?) as a
where length(a.col1) > ?所以处理的时候不能简单的说从右分析起,取?左侧的 from 和 where之间的就是它对应的表,比较符号旁边的就是它的字段.因为有括号的优先级在那放着1:括号中的内容替换
可以从第一个右括号分析起,(为什么从第一个右括号分析起,自己想想)
找到第一个对应的括号,判断是否其中内容是否存在select ,存在则为嵌套表,否则则为字段,然后把括号和括号中的内容替换
并记录下来
接着找,接着替换,...2:字段名的获取
字段类的,直接排除函数、运算符号,取得字段的名字,如果有表的别名,别名也记录下来3:表名获取
取表名根据最初分析的时候记录的索引信息去配对因为想的很粗糙,所以写的简单,干活了~~~
http://community.csdn.net/Expert/topic/4103/4103537.xml?temp=.1547815
2:由于类型的种类有限,这样我就一个个的试,去运行该替换后的SQL,当不出现异常的类型就是该?对应的类型
3:至于每个?对应的字段名的获取,就取它左边最近的非(= > < <> <= >= like between and)等保留字前面的字符串
不知道各位大大还有没有更好的方法?
1、要么就是把所有操作符都列出来一个个分析
2、要么可以试一下这个,有对应的语法文件的
http://www.antlr.org/