druid字段級 Druid中sql解析

2021-10-13 12:27:46 字數 1868 閱讀 8359

基於druid解析查詢sql,在jdbc api基礎上進行外掛程式開發的時候需要。

import com.alibaba.druid.sql.sqlutils;

import com.alibaba.druid.sql.ast.statement.sqlselect;

import com.alibaba.druid.sql.ast.statement.sqlselectitem;

import com.alibaba.druid.sql.ast.statement.sqlselectqueryblock;

import com.alibaba.druid.sql.ast.statement.sqlselectstatement;

import com.alibaba.druid.sql.dialect.mysql.parser.mysqlstatementparser;

import com.alibaba.druid.sql.visitor.sqlastoutputvisitor;

import com.alibaba.druid.util.jdbcutils;

public class sqlparsetest {

public static void main(string args){

string sql = " select eventid,eventkey,eventname,flag from event where eventid = ? and eventkey = ? and eventname = ?";

//使用mysql解析

mysqlstatementparser sqlstatementparser = new mysqlstatementparser(sql) ;

//解析select查詢

sqlselectstatement sqlstatement = sqlstatementparser.parseselect() ;

sqlselect sqlselect = sqlstatement.getselect() ;

//獲取sql查詢塊

sqlselectqueryblock sqlselectquery = (sqlselectqueryblock)sqlselect.getquery() ;

stringbuffer out = new stringbuffer() ;

//建立sql解析的標準化輸出

sqlastoutputvisitor sqlastoutputvisitor = sqlutils.createformatoutputvisitor(out , null , jdbcutils.mysql) ;

//解析select項

out.delete(0, out.length()) ;

for (sqlselectitem sqlselectitem : sqlselectquery.getselectlist()) {

if(out.length()>1){

sqlselectitem.accept(sqlastoutputvisitor);

system.out.println("select "+out) ;

//解析from

out.delete(0, out.length()) ;

sqlselectquery.getfrom().accept(sqlastoutputvisitor) ;

system.out.println("from "+out) ;

//解析where

out.delete(0, out.length()) ;

sqlselectquery.getwhere().accept(sqlastoutputvisitor) ;

system.out.println("where "+out);

druid字段級 Druid的資料結構

druid的資料結構 druid資料儲存結構可以分為三層 1.datasource 2.chunk 3.segment datasource相當於傳統資料庫的按時間分割槽的表,chunk相當於mysql中的按時間分割槽的表乙個分割槽,但是chunk不是乙個實體,只是乙個虛擬的概念,乙個chunk中可...

解Bug之路 Druid的Bug

筆者很熱衷於解決bug,同時比較擅長 網路 協議 部分,所以經常被喚去解決一些網路io方面的bug。現在就挑乙個案例出來,寫出分析思路,以饗讀者,希望讀者在以後的工作中能夠少踩點坑。此bug是druid低版本的bug,此bug至少在1.0.12版本就已經修復。在緊張的新專案開發的日子裡,突然收到線上...

grails配置druid監控sql

buildconfig.groovy新增jar包,自行選擇版本 compile com.alibaba druid 1.1.21 resource.groovy新增datasource,注入druid的datasource beans 在此配置資料來源,由於我的資料庫連線引數是寫在datasourc...