最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

java中復(fù)雜查詢sql語(yǔ)句該怎么寫

 更新時(shí)間:2022年11月01日 10:48:09   作者:二哥別秀了  
我們知道在java連接數(shù)據(jù)庫(kù)之后,需要數(shù)據(jù)庫(kù)的sql語(yǔ)句,下面這篇文章主要給大家介紹了關(guān)于java中復(fù)雜查詢sql語(yǔ)句該怎么寫的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下

java中的復(fù)雜查詢sql語(yǔ)句實(shí)現(xiàn):

這樣的查詢欄,在頁(yè)面中很常見(jiàn),這就是復(fù)雜查詢的條件,我們可以填寫一個(gè)條件或多個(gè)條件,也可以一個(gè)都不填寫,在這樣的情況下我們的sql語(yǔ)句就不能是一個(gè)固定的String類型的字符串。

看到這相信大家都想到用什么來(lái)定義sql語(yǔ)句了,沒(méi)錯(cuò)就是StringBuilder,基本模板應(yīng)該就是

 String sql = "select * from `user` ";
 StringBuilder sb = new StringBuilder(sql);

但是這一步之后就存在一個(gè)難點(diǎn),如何添加查詢條件呢?

判斷每一個(gè)條件,如果條件存在且不為空,拼接字符串,用模糊查詢

sb.append(" where name like ? ");

理論上沒(méi)錯(cuò),但是如果多個(gè)條件呢?

sql語(yǔ)句就存在問(wèn)題了,當(dāng)多個(gè)條件存在時(shí),sql語(yǔ)句就被拼接成

String sql = "select * from `user` where name like ? where address like ?" 

這明顯是不行的,有一個(gè)最簡(jiǎn)單的方法去定義一個(gè)正確的基本模板

String sql = "select * from `user` where 1 = 1 ";

在上面的模板上添加一個(gè)where 1 = 1 ,恒成立條件,無(wú)論有沒(méi)有條件,都可以運(yùn)行,那么存在條件的拼接語(yǔ)句就可以寫出來(lái)了

sb.append(" and name like ? ");

String sql = "select * from `user` where 1 = 1 " //沒(méi)有條件的查詢
//當(dāng)多個(gè)條件存在時(shí)
String sql = "select * from `user` where 1 = 1  and name like ?  and address like ? "
//多個(gè)條件也能成立

但是還有兩個(gè)特別需要注意的點(diǎn)就是:

1.拼接字符串時(shí),應(yīng)該在拼接的開(kāi)頭敲上一個(gè)空格,這樣才能讓拼接起來(lái)的字符串之間存在空格不會(huì)變成連在一起的字符串,那樣也會(huì)報(bào)錯(cuò)

2.填充占位符時(shí),直接把值填上是不行的,因?yàn)槲覀冃枰氖悄:樵?,所以我們?yīng)該在填充值的時(shí)候在值的前面和后面加上“%”號(hào)。

補(bǔ)充:JAVA編程規(guī)范之SQL 語(yǔ)句

結(jié)構(gòu)化查詢語(yǔ)言(Structured Query Language)簡(jiǎn)稱SQL,結(jié)構(gòu)化查詢語(yǔ)言是一種數(shù)據(jù)庫(kù)查詢和程序設(shè)計(jì)語(yǔ)言,用于存取數(shù)據(jù)以及查詢、更新和管理關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)

1、【強(qiáng)制】不要使用 count(列名)或 count(常量)來(lái)替代 count(),count()是 SQL92 定義的標(biāo)準(zhǔn)統(tǒng)計(jì)行數(shù)的語(yǔ)法,跟數(shù)據(jù)庫(kù)無(wú)關(guān),跟 NULL 和非 NULL 無(wú)關(guān)。

說(shuō)明 : count(*)會(huì)統(tǒng)計(jì)值為 NULL 的行,而 count(列名)不會(huì)統(tǒng)計(jì)此列為 NULL 值的行。

2、【強(qiáng)制】count(distinct col) 計(jì)算該列除 NULL 之外的不重復(fù)行數(shù),注意 count(distinct col1, col2) 如果其中一列全為 NULL,那么即使另一列有不同的值,也返回為 0。

3、【強(qiáng)制】當(dāng)某一列的值全是 NULL 時(shí),count(col)的返回結(jié)果為 0,但 sum(col)的返回結(jié)果為 NULL,因此使用 sum()時(shí)需注意 NPE 問(wèn)題。

正例 : 可以使用如下方式來(lái)避免 sum 的 NPE 問(wèn)題: SELECT IF(ISNULL(SUM(g)),0,SUM(g)) FROM table;

4、【強(qiáng)制】使用 ISNULL()來(lái)判斷是否為 NULL 值。注意: NULL 與任何值的直接比較都為 NULL。

5、【強(qiáng)制】在代碼中寫分頁(yè)查詢邏輯時(shí),若 count 為 0 應(yīng)直接返回,避免執(zhí)行后面的分頁(yè)語(yǔ)句。

6、【強(qiáng)制】不得使用外鍵與級(jí)聯(lián),一切外鍵概念必須在應(yīng)用層解決。

說(shuō)明 : (概念解釋)學(xué)生表中的 student_id 是主鍵,那么成績(jī)表中的 student_id 則為外鍵。如果更新學(xué)生表中的 student_id,同時(shí)觸發(fā)成績(jī)表中的 student_id 更新,則為級(jí)聯(lián)更新。外鍵與級(jí)聯(lián)更新適用于單機(jī)低并發(fā),不適合分布式、高并發(fā)集群;級(jí)聯(lián)更新是強(qiáng)阻塞,存在數(shù)據(jù)庫(kù)更新風(fēng)暴的風(fēng)險(xiǎn);外鍵影響數(shù)據(jù)庫(kù)的插入速度。

7、【強(qiáng)制】禁止使用存儲(chǔ)過(guò)程,存儲(chǔ)過(guò)程難以調(diào)試和擴(kuò)展,更沒(méi)有移植性。

8、【強(qiáng)制】數(shù)據(jù)訂正時(shí),刪除和修改記錄時(shí),要先 select,避免出現(xiàn)誤刪除,確認(rèn)無(wú)誤才能執(zhí)行更新語(yǔ)句。

9、【推薦】in 操作能避免則避免,若實(shí)在避免不了,需要仔細(xì)評(píng)估 in 后邊的集合元素?cái)?shù)量,控制在 1000 個(gè)之內(nèi)。

10、【參考】如果有全球化需要,所有的字符存儲(chǔ)與表示,均以 utf-8 編碼,注意字符統(tǒng)計(jì)函數(shù)的區(qū)別。

11、【參考】TRUNCATE TABLE 比 DELETE 速度快,且使用的系統(tǒng)和事務(wù)日志資源少,但 TRUNCATE 無(wú)事務(wù)且不觸發(fā) trigger,有可能造成事故,故不建議在開(kāi)發(fā)代碼中使用此語(yǔ)句。

說(shuō)明 : TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語(yǔ)句相同。

總結(jié)

到此這篇關(guān)于java中復(fù)雜查詢sql語(yǔ)句該怎么寫的文章就介紹到這了,更多相關(guān)java復(fù)雜查詢sql語(yǔ)句內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 一文講解如何優(yōu)雅的調(diào)試jar包

    一文講解如何優(yōu)雅的調(diào)試jar包

    在現(xiàn)實(shí)開(kāi)發(fā)過(guò)程中,現(xiàn)場(chǎng)環(huán)境永遠(yuǎn)比開(kāi)發(fā)環(huán)境復(fù)雜,下面這篇文章主要給大家介紹了關(guān)于如何優(yōu)雅的調(diào)試jar包的相關(guān)資料,文中通過(guò)圖文介紹的非常詳細(xì),需要的朋友可以參考下
    2022-03-03
  • springBoot+mybaties后端多層架構(gòu)的實(shí)現(xiàn)示例

    springBoot+mybaties后端多層架構(gòu)的實(shí)現(xiàn)示例

    本文主要介紹了springBoot+mybaties后端多層架構(gòu)的實(shí)現(xiàn)示例,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2022-07-07
  • java接口中的代理設(shè)計(jì)模式代碼時(shí)實(shí)踐

    java接口中的代理設(shè)計(jì)模式代碼時(shí)實(shí)踐

    這篇文章主要介紹了java接口中的代理設(shè)計(jì)模式代碼時(shí)實(shí)踐,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • 詳解Java 包掃描實(shí)現(xiàn)和應(yīng)用(Jar篇)

    詳解Java 包掃描實(shí)現(xiàn)和應(yīng)用(Jar篇)

    這篇文章主要介紹了詳解Java 包掃描實(shí)現(xiàn)和應(yīng)用(Jar篇),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • SpringBoot web開(kāi)發(fā)源碼深入分析

    SpringBoot web開(kāi)發(fā)源碼深入分析

    Web開(kāi)發(fā)的核心內(nèi)容主要包括內(nèi)嵌的Servlet容器和SpringMVCSpringBoot使用起來(lái)非常簡(jiǎn)潔,大部分配置都有SpringBoot自動(dòng)裝配,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧
    2022-10-10
  • logback的isDebugEnabled日志配置級(jí)別源碼解析

    logback的isDebugEnabled日志配置級(jí)別源碼解析

    這篇文章主要為大家介紹了logback的isDebugEnabled日志配置級(jí)別源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-11-11
  • 如何解決Maven無(wú)法拉取SNAPSHOT依賴問(wèn)題

    如何解決Maven無(wú)法拉取SNAPSHOT依賴問(wèn)題

    在使用Maven管理項(xiàng)目時(shí),可能會(huì)遇到無(wú)法拉取SNAPSHOT版本依賴的問(wèn)題,這通常是因?yàn)镸aven默認(rèn)不支持直接拉取SNAPSHOT版本,遇到這樣的問(wèn)題,可以通過(guò)在項(xiàng)目的pom.xml文件中添加<repositories>標(biāo)簽,并配置啟用SNAPSHOT的倉(cāng)庫(kù)地址來(lái)解決
    2024-10-10
  • 詳解springboot+atomikos+druid?數(shù)據(jù)庫(kù)連接失效分析

    詳解springboot+atomikos+druid?數(shù)據(jù)庫(kù)連接失效分析

    本文主要介紹了springboot+atomikos+druid?數(shù)據(jù)庫(kù)連接失效分析,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-02-02
  • Idea中g(shù)it的使用小結(jié)

    Idea中g(shù)it的使用小結(jié)

    這篇文章主要介紹了Idea中g(shù)it的使用小結(jié),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2024-01-01
  • JAVA與SQL 中的null與NULL解析

    JAVA與SQL 中的null與NULL解析

    這篇文章主要介紹了JAVA與SQL 中的null與NULL解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-08-08

最新評(píng)論

出国| 普格县| 高阳县| 南昌市| 轮台县| 铜山县| 郑州市| 西乌| 曲沃县| 图木舒克市| 合川市| 张北县| 长岭县| 丰县| 元谋县| 新津县| 盐源县| 平湖市| 吐鲁番市| 兴海县| 岚皋县| 梅河口市| 邵阳市| 曲水县| 福安市| 安顺市| 华宁县| 二手房| 承德市| 习水县| 龙岩市| 徐汇区| 麦盖提县| 沙洋县| 岳西县| 新密市| 西吉县| 钦州市| 宜阳县| 涞源县| 同江市|