JSqlParser
昨天在群里看到有小伙伴問,Java里如何解析SQL語句然后格式化SQL,是否有現(xiàn)成類庫可以使用?
之前TJ沒有做過這類需求,所以去研究了一下,并找到了一個(gè)不過的解決方案,今天推薦給大家,如果您正要做類似內(nèi)容,那就拿來試試,如果暫時(shí)沒需求,就先了解收藏(技多不壓身)。
JSqlParser
JSqlParser是一個(gè)用Java編寫的SQL解析器,可以將SQL語句解析為Java對(duì)象,從而使開發(fā)人員能夠輕松地分析、修改和重構(gòu)SQL查詢。
比如,這樣的一句SQL語句SELECT 1 FROM dual WHERE a = bSELECT 1 FROM dual WHERE a = b
JSqlParser可以將其解析為如下對(duì)象結(jié)構(gòu)
SQLText └─Statements:net.sf.jsqlparser.statement.select.Select └─selectBody:net.sf.jsqlparser.statement.select.PlainSelect ├─selectItems->Collection│└─selectItems:net.sf.jsqlparser.statement.select.SelectExpressionItem │└─LongValue:1 ├─Table:dual └─where:net.sf.jsqlparser.expression.operators.relational.EqualsTo ├─Column:a └─Column:b
然后我們就可以通過其提供的API來訪問這句SQL語句中的各個(gè)要素:
Statementstatement=CCJSqlParserUtil.parse(sqlStr); if(statementinstanceofSelect){ Selectselect=(Select)statement; PlainSelectplainSelect=(PlainSelect)select.getSelectBody(); SelectExpressionItemselectExpressionItem= (SelectExpressionItem)plainSelect.getSelectItems().get(0); Tabletable=(Table)plainSelect.getFromItem(); EqualsToequalsTo=(EqualsTo)plainSelect.getWhere(); Columna=(Column)equalsTo.getLeftExpression(); Columnb=(Column)equalsTo.getRightExpression(); }
目前,JSqlParser支持了大部分主要的關(guān)系型數(shù)據(jù)庫,包括:
Oracle
MS SQL Server and Sybase
PostgreSQL
MySQL and MariaDB
DB2
H2 and HSQLDB and Derby
SQLite
它支持大多數(shù)常見的SQL語法,包括SELECT、INSERT、UPDATE、DELETE等。除了解析SQL語句外,JSqlParser還提供了一些有用的功能,例如格式化SQL語句、生成SQL查詢等。此外,JSqlParser還可以與其他Java庫和框架集成,例如Hibernate、Spring等。
-
JAVA
+關(guān)注
關(guān)注
20文章
2984瀏覽量
106808 -
格式化
+關(guān)注
關(guān)注
2文章
39瀏覽量
9284 -
SQL
+關(guān)注
關(guān)注
1文章
780瀏覽量
44796 -
數(shù)據(jù)庫
+關(guān)注
關(guān)注
7文章
3900瀏覽量
65751
原文標(biāo)題:Java中如何解析、格式化、生成SQL語句?
文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
U盤在windows無法格式化如何解決
如何解決bitlockerU盤 格式化?
格式化硬盤
筆記本硬盤維護(hù)之格式化篇
筆記本硬盤格式化幾點(diǎn)須知
如何格式化硬盤
格式化對(duì)硬盤有傷害嗎_硬盤格式化后數(shù)據(jù)還能恢復(fù)嗎
java生成json格式數(shù)據(jù) 和 java遍歷json格式數(shù)據(jù)
格式化是什么
python字符串格式化

評(píng)論