思路
用开源的druid解析 sql 语句。
druid 是阿里开源在github 上面的数据库连接池,里面有一个专门解析 sql 语句的模块。
支持的数据库类型:
理论上说,支持所有有jdbc驱动的数据库。
实际测试过的有mysql(大规模使用)、oracle(大规模使用)、sqlserver、postgres、db2、h2、derby、sqlite、sybase。
druid 使用说明:
druid 现在已经直接发布到了 maven 仓库中,可以直接引用。
1、新建一个 maven 工程名为 TestSqlParser
2、在 文件中加入如下配置,当前最新使用 1.2.3
<dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.2.3</version> </dependency>
3、代码实例,以oracle为例:
import com.alibaba.druid.; import com.alibaba.druid.; import com.alibaba.druid.; import com.alibaba.druid.u; import java.u; public class TestSqlParser { public static void main(String[] args) { // String sql = "update t set name = 'x' where id < 100 limit 10"; // String sql = "SELECT ID, NAME, AGE FROM USER WHERE ID = ? limit 2"; // String sql = "select * from tablename limit 10"; String sql = "select user,abc from emp_table order by c1 asc,c2 desc"; String dbType = JdbcCon; //格式化输出 String result = SQLU(sql, dbType); Sy(result); // 缺省大写格式 List<SQLStatement> stmtList = SQLU(sql, dbType); //解析出的独立语句的个数 Sy("size is:" + ()); for (int i = 0; i < (); i++) { SQLStatement stmt = (i); OracleSchemaStatVisitor visitor = new OracleSchemaStatVisitor(); (visitor); //获取表名称 // Sy("Tables : " + vi()); //获取操作方法名称,依赖于表名称 Sy("Manipulation : " + vi()); //获取字段名称 Sy("fields : " + vi()); //获取排序名称 Sy("getOrderByColumns : " + vi()); //获取分组 Sy("getGroupByColumns : " + vi()); } } }
我是一名码龄10年的程序员,在这里会分享实在干货,让你少走弯路,成就精彩人生。