使用alibaba Druid 对sql 语句进行校验
来源:互联网 发布:淘宝装修图片加热点 编辑:程序博客网 时间:2024/05/18 12:02
使用到了 Druid中的 实现了 访问者模式的 各类visitor 对 sql 进行读取与解析
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId> <version>1.0.17</version></dependency>
List<SqlDto> results = new ArrayList<SqlDto>();MySqlStatementParser parser = new MySqlStatementParser(sqls);List<SQLStatement> stmtList = parser.parseStatementList();// 将AST通过visitor输出StringBuilder out = new StringBuilder();MySqlOutputVisitor visitor = new MySqlOutputVisitor(out);for (SQLStatement stmt : stmtList) {SqlDto sqlDto = new SqlDto();stmt.accept(visitor);out.append(";");if (stmt instanceof SQLSelectStatement) {sqlDto.setType(SqlType.SELECT);sqlDto.setSql(out.toString());} else if (stmt instanceof SQLInsertStatement) {sqlDto.setType(SqlType.INSERT);sqlDto.setSql(out.toString());} else if (stmt instanceof SQLUpdateStatement) {sqlDto.setType(SqlType.UPDATE);sqlDto.setSql(out.toString());} else if (stmt instanceof SQLDeleteStatement) {sqlDto.setType(SqlType.DELETE);sqlDto.setSql(out.toString());} else if (stmt instanceof SQLAlterTableStatement) {sqlDto.setType(SqlType.ALTER);sqlDto.setSql(out.toString());SQLAlterTableStatement alterStmt = (SQLAlterTableStatement) stmt;String tableName = alterStmt.getTableSource().toString().trim();int pos = tableName.indexOf('`');if (pos >= 0) {int end = tableName.lastIndexOf('`');tableName = tableName.substring(1, end);}sqlDto.setTableName(tableName);} else if (stmt instanceof SQLCreateTableStatement) {sqlDto.setType(SqlType.CREATE);sqlDto.setSql(out.toString());} else if (stmt instanceof SQLExplainStatement) {sqlDto.setType(SqlType.EXPLAIN);sqlDto.setSql(out.toString());} else if (stmt instanceof SQLDropTableStatement) {sqlDto.setType(SqlType.DROP);sqlDto.setSql(out.toString());} else if (stmt instanceof MySqlRenameTableStatement) {sqlDto.setType(SqlType.RENAME);sqlDto.setSql(out.toString());} else if (stmt instanceof MySqlReplaceStatement) {sqlDto.setType(SqlType.REPLACE);sqlDto.setSql(out.toString());} else {sqlDto.setType(SqlType.OTHER);sqlDto.setSql(out.toString());}results.add(sqlDto);out.setLength(0);}return results;
public class SqlExplain { public static void main(String[] args){ String sqls = "select ID from BCP_Prize; sel2ect name from BCP_Prize"; MySqlStatementParser parser = new MySqlStatementParser(sqls); List<SQLStatement> stmtList = parser.parseStatementList(); // 将AST通过visitor输出 StringBuilder out = new StringBuilder(); MySqlOutputVisitor visitor = new MySqlOutputVisitor(out); for (SQLStatement stmt : stmtList) { stmt.accept(visitor); System.out.println(out + ";"); out.setLength(0); } }}
阅读全文
0 0
- 使用alibaba Druid 对sql 语句进行校验
- alibaba/druid 使用ConfigFilter
- Druid对SQL语句检测拦截
- 使用SQL语句进行数据比对
- 使用Druid对SQL执行情况进行监控,以及SQL注入等的检查
- alibaba druid
- alibaba-Druid的使用和配置
- Druid数据库连接池使用com.alibaba.druid.pool.DruidDataSource
- 使用SQL语句对Access数据库进行备份
- 使用WHERE语句对SQL进行基础性的优化
- 使用SQL语句对数据进行简单报表汇总
- 使用SQL语句对Oracle数据库数据进行拼接
- 使用js对标单进行校验
- 使用SQL-DMO备份并进行校验
- druid对数据库连接进行加密
- alibaba druid 的配置
- alibaba/druid 常见问题
- alibaba druid学习资源
- ES6学习之路~~数据结构:set和map
- 手机端选择照片和调用摄像头
- HDU2196-Computer(树形dp)
- 数据结构实验之串三:KMP应用
- 如何在 Linux 虚拟机上扩展根文件系统
- 使用alibaba Druid 对sql 语句进行校验
- 关于对外链建设中裸链和锚链分析
- django错误
- うわさ的一些惯用搭配
- DNS服务器和web服务器配置--自我操作
- 修改DialogFragment的大小和位置
- 客户信息管理系统3—客户信息的增加(二)
- 通过 ulimit 改善系统性能
- N-Queens