0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Java中如何解析、格式化、生成SQL語(yǔ)句?

jf_ro2CN3Fa ? 來(lái)源:芋道源碼 ? 2023-04-10 11:59 ? 次閱讀

JSqlParser

昨天在群里看到有小伙伴問(wèn),Java里如何解析SQL語(yǔ)句然后格式化SQL,是否有現(xiàn)成類庫(kù)可以使用?

之前TJ沒(méi)有做過(guò)這類需求,所以去研究了一下,并找到了一個(gè)不過(guò)的解決方案,今天推薦給大家,如果您正要做類似內(nèi)容,那就拿來(lái)試試,如果暫時(shí)沒(méi)需求,就先了解收藏(技多不壓身)。

JSqlParser

JSqlParser是一個(gè)用Java編寫(xiě)的SQL解析器,可以將SQL語(yǔ)句解析為Java對(duì)象,從而使開(kāi)發(fā)人員能夠輕松地分析、修改和重構(gòu)SQL查詢。

比如,這樣的一句SQL語(yǔ)句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

然后我們就可以通過(guò)其提供的API來(lái)訪問(wèn)這句SQL語(yǔ)句中的各個(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ù)庫(kù),包括:

Oracle

MS SQL Server and Sybase

PostgreSQL

MySQL and MariaDB

DB2

H2 and HSQLDB and Derby

SQLite

它支持大多數(shù)常見(jiàn)的SQL語(yǔ)法,包括SELECT、INSERT、UPDATE、DELETE等。除了解析SQL語(yǔ)句外,JSqlParser還提供了一些有用的功能,例如格式化SQL語(yǔ)句、生成SQL查詢等。此外,JSqlParser還可以與其他Java庫(kù)和框架集成,例如Hibernate、Spring等。

審核編輯:湯梓紅
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2973

    瀏覽量

    104901
  • 格式化
    +關(guān)注

    關(guān)注

    2

    文章

    39

    瀏覽量

    9128
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    770

    瀏覽量

    44190
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3839

    瀏覽量

    64542

原文標(biāo)題:Java中如何解析、格式化、生成SQL語(yǔ)句?

文章出處:【微信號(hào):芋道源碼,微信公眾號(hào):芋道源碼】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    U盤(pán)在windows無(wú)法格式化何解

    U盤(pán)在windows無(wú)法格式化何解決嘗試一:殺毒排查,無(wú)毒嘗試二:當(dāng)然是本機(jī)格式化,無(wú)效嘗試三:DOS下format,提示出現(xiàn)錯(cuò)誤,無(wú)效嘗試四:到管理工具--計(jì)算機(jī)管理---磁盤(pán)管理下找優(yōu)盤(pán)盤(pán)符
    發(fā)表于 05-20 17:37

    SQL語(yǔ)句生成

    SQL語(yǔ)句生成SQL數(shù)據(jù)庫(kù)語(yǔ)句生成及分析器(支持表結(jié)構(gòu)、索引、所有記錄到
    發(fā)表于 06-12 16:15

    何解決bitlockerU盤(pán) 格式化?

    SanDis U盤(pán) 128G,沒(méi)有物理保護(hù)鍵,設(shè)置了bitlocker,知道密碼,可以正常讀取,無(wú)法編輯,Windows下無(wú)法使用格式化,磁盤(pán)工具檢查修復(fù)無(wú)法運(yùn)行,我的電腦右鍵管理磁盤(pán)工具無(wú)法
    發(fā)表于 10-28 21:08

    格式化硬盤(pán)

    格式化硬盤(pán) 軟盤(pán)只需要一次格式化,硬盤(pán)卻需要兩級(jí),即低級(jí)格式化和高級(jí)格式化?! ∮脖P(pán)的低級(jí)格式化在每個(gè)磁片上劃分
    發(fā)表于 12-25 15:40 ?1099次閱讀

    筆記本硬盤(pán)維護(hù)之格式化

    筆記本硬盤(pán)維護(hù)之格式化篇   格式化硬盤(pán)(并非低格)會(huì)影響硬盤(pán)壽命嗎?用Windows對(duì)硬盤(pán)進(jìn)行格式化與對(duì)軟盤(pán)進(jìn)行格式化原理一樣
    發(fā)表于 01-20 10:32 ?373次閱讀

    筆記本硬盤(pán)格式化幾點(diǎn)須知

    筆記本硬盤(pán)格式化幾點(diǎn)須知  格式化硬盤(pán)(并非低格)會(huì)影響硬盤(pán)壽命嗎?用Windows對(duì)硬盤(pán)進(jìn)行格式化與對(duì)軟盤(pán)進(jìn)行格式化原理一樣嗎?
    發(fā)表于 01-23 14:15 ?674次閱讀

    如何格式化硬盤(pán)

    如何格式化硬盤(pán)    這是廣大電腦初學(xué)者經(jīng)常詢問(wèn)的問(wèn)題,因?yàn)?b class='flag-5'>格式化硬盤(pán)是安裝裝系統(tǒng)的前提,所以這就成為了需要首先解決的問(wèn)題,本文將針這個(gè)
    發(fā)表于 02-24 11:25 ?475次閱讀

    硬盤(pán)無(wú)法格式化如何處理

    硬盤(pán)無(wú)法格式化如何處理   筆者有一塊20GB的長(zhǎng)城硬盤(pán),出現(xiàn)了故障,無(wú)法正常使用,就連格式化都不能順利通過(guò),閑置一旁已多日
    發(fā)表于 02-24 11:39 ?8269次閱讀

    格式化對(duì)硬盤(pán)有傷害嗎_硬盤(pán)格式化后數(shù)據(jù)還能恢復(fù)嗎

    普通的格式化硬盤(pán)是不會(huì)影響硬盤(pán)壽命的。硬盤(pán)格式化后數(shù)據(jù)還能恢復(fù)嗎?下面就來(lái)看看使用強(qiáng)力數(shù)據(jù)是如何將格式化后的數(shù)據(jù)給恢復(fù)的吧。
    發(fā)表于 12-14 16:09 ?1.7w次閱讀

    java生成json格式數(shù)據(jù) 和 java遍歷json格式數(shù)據(jù)

    本文檔內(nèi)容介紹了基于java生成json格式數(shù)據(jù) 和 java遍歷json格式數(shù)據(jù),供參考
    發(fā)表于 03-19 15:04 ?0次下載

    格式化是什么

    格式化(format)是指對(duì)磁盤(pán)或磁盤(pán)的分區(qū)(partition)進(jìn)行初始的一種操作,這種操作通常會(huì)導(dǎo)致現(xiàn)有的磁盤(pán)或分區(qū)中所有的文件被清除。格式化通常分為低級(jí)
    的頭像 發(fā)表于 01-09 15:20 ?8.6w次閱讀

    D盤(pán)無(wú)法格式化的解決方法分享

    電腦的使用windows7系統(tǒng)過(guò)程,發(fā)現(xiàn)電腦磁盤(pán)的有一些不需要的文件想直接格式化,由于自己的電腦D盤(pán)太亂,想要格式化D盤(pán)。
    的頭像 發(fā)表于 08-10 16:25 ?5374次閱讀
    D盤(pán)無(wú)法<b class='flag-5'>格式化</b>的解決方法分享

    python字符串格式化

    python字符串格式化 格式化輸出,主要有三種方式 使用 % 進(jìn)行格式化 使用 format 函數(shù)進(jìn)行格式化 使用 f-string 進(jìn)行格式化
    的頭像 發(fā)表于 02-21 16:28 ?1600次閱讀
    python字符串<b class='flag-5'>格式化</b>

    如何使用 Java 原生格式化Instant

    今天我們將聊聊如何在Java把一個(gè) Instant 格式化為一個(gè)字符串。我們將展示如何使用 Java 原生和第三方庫(kù)(如Joda-Time)來(lái)處理這個(gè)事情。 使用
    的頭像 發(fā)表于 10-09 14:51 ?1298次閱讀

    oracle執(zhí)行sql查詢語(yǔ)句的步驟是什么

    Oracle數(shù)據(jù)庫(kù)是一種常用的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),具有強(qiáng)大的SQL查詢功能。Oracle執(zhí)行SQL查詢語(yǔ)句的步驟包括編寫(xiě)SQL語(yǔ)句、
    的頭像 發(fā)表于 12-06 10:49 ?997次閱讀