昨天在群里看到有小伙伴問,Java里如何決議SQL陳述句然后格式化SQL,是否有現成類別庫可以使用?
之前TJ沒有做過這類需求,所以去研究了一下,并找到了一個不過的解決方案,今天推薦給大家,如果您正要做類似內容,那就拿來試試,如果暫時沒需求,就先了解收藏(技多不壓身),
JSqlParser
JSqlParser是一個用Java撰寫的SQL決議器,可以將SQL陳述句決議為Java物件,從而使開發人員能夠輕松地分析、修改和重構SQL查詢,
比如,這樣的一句SQL陳述句SELECT 1 FROM dual WHERE a = bSELECT 1 FROM dual WHERE a = b
JSqlParser可以將其決議為如下物件結構
SQL Text
└─Statements: net.sf.jsqlparser.statement.select.Select
└─selectBody: net.sf.jsqlparser.statement.select.PlainSelect
├─selectItems -> Collection<SelectExpressionItem>
│ └─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陳述句中的各個要素:
Statement statement = CCJSqlParserUtil.parse(sqlStr);
if (statement instanceof Select) {
Select select = (Select) statement;
PlainSelect plainSelect = (PlainSelect) select.getSelectBody();
SelectExpressionItem selectExpressionItem =
(SelectExpressionItem) plainSelect.getSelectItems().get(0);
Table table = (Table) plainSelect.getFromItem();
EqualsTo equalsTo = (EqualsTo) plainSelect.getWhere();
Column a = (Column) equalsTo.getLeftExpression();
Column b = (Column) equalsTo.getRightExpression();
}
目前,JSqlParser支持了大部分主要的關系型資料庫,包括:
- Oracle
- MS SQL Server and Sybase
- PostgreSQL
- MySQL and MariaDB
- DB2
- H2 and HSQLDB and Derby
- SQLite
它支持大多數常見的SQL語法,包括SELECT、INSERT、UPDATE、DELETE等,除了決議SQL陳述句外,JSqlParser還提供了一些有用的功能,例如格式化SQL陳述句、生成SQL查詢等,此外,JSqlParser還可以與其他Java庫和框架集成,例如Hibernate、Spring等,
- 專案地址:https://github.com/JSQLParser/JSqlParser
歡迎關注我的公眾號:程式猿DD,第一時間了解前沿行業訊息、分享深度技術干貨、獲取優質學習資源
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/546042.html
標籤:其他
上一篇:【牛客】7 計數器&存盤器&綜合
下一篇:Use CMake notes
