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

java中復雜查詢sql語句該怎么寫

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

java中的復雜查詢sql語句實現(xiàn):

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

看到這相信大家都想到用什么來定義sql語句了,沒錯就是StringBuilder,基本模板應該就是

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

但是這一步之后就存在一個難點,如何添加查詢條件呢?

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

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

理論上沒錯,但是如果多個條件呢?

sql語句就存在問題了,當多個條件存在時,sql語句就被拼接成

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

這明顯是不行的,有一個最簡單的方法去定義一個正確的基本模板

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

在上面的模板上添加一個where 1 = 1 ,恒成立條件,無論有沒有條件,都可以運行,那么存在條件的拼接語句就可以寫出來了

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

String sql = "select * from `user` where 1 = 1 " //沒有條件的查詢
//當多個條件存在時
String sql = "select * from `user` where 1 = 1  and name like ?  and address like ? "
//多個條件也能成立

但是還有兩個特別需要注意的點就是:

1.拼接字符串時,應該在拼接的開頭敲上一個空格,這樣才能讓拼接起來的字符串之間存在空格不會變成連在一起的字符串,那樣也會報錯

2.填充占位符時,直接把值填上是不行的,因為我們需要的是模糊查詢,所以我們應該在填充值的時候在值的前面和后面加上“%”號。

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

結構化查詢語言(Structured Query Language)簡稱SQL,結構化查詢語言是一種數(shù)據(jù)庫查詢和程序設計語言,用于存取數(shù)據(jù)以及查詢、更新和管理關系數(shù)據(jù)庫系統(tǒng)

1、【強制】不要使用 count(列名)或 count(常量)來替代 count(),count()是 SQL92 定義的標準統(tǒng)計行數(shù)的語法,跟數(shù)據(jù)庫無關,跟 NULL 和非 NULL 無關。

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

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

3、【強制】當某一列的值全是 NULL 時,count(col)的返回結果為 0,但 sum(col)的返回結果為 NULL,因此使用 sum()時需注意 NPE 問題。

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

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

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

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

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

7、【強制】禁止使用存儲過程,存儲過程難以調試和擴展,更沒有移植性。

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

9、【推薦】in 操作能避免則避免,若實在避免不了,需要仔細評估 in 后邊的集合元素數(shù)量,控制在 1000 個之內。

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

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

說明 : TRUNCATE TABLE 在功能上與不帶 WHERE 子句的 DELETE 語句相同。

總結

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

相關文章

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

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

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

    springBoot+mybaties后端多層架構的實現(xiàn)示例

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

    java接口中的代理設計模式代碼時實踐

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

    詳解Java 包掃描實現(xiàn)和應用(Jar篇)

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

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

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

    logback的isDebugEnabled日志配置級別源碼解析

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

    如何解決Maven無法拉取SNAPSHOT依賴問題

    在使用Maven管理項目時,可能會遇到無法拉取SNAPSHOT版本依賴的問題,這通常是因為Maven默認不支持直接拉取SNAPSHOT版本,遇到這樣的問題,可以通過在項目的pom.xml文件中添加<repositories>標簽,并配置啟用SNAPSHOT的倉庫地址來解決
    2024-10-10
  • 詳解springboot+atomikos+druid?數(shù)據(jù)庫連接失效分析

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

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

    Idea中git的使用小結

    這篇文章主要介紹了Idea中git的使用小結,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2024-01-01
  • JAVA與SQL 中的null與NULL解析

    JAVA與SQL 中的null與NULL解析

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

最新評論

麟游县| 长垣县| 阿鲁科尔沁旗| 东安县| 婺源县| 湘潭县| 思南县| 阳山县| 台州市| 永年县| 哈巴河县| 保定市| 军事| 绥中县| 读书| 汉中市| 常宁市| 昌江| 南丰县| 江阴市| 岑巩县| 宁国市| 五台县| 连江县| 岚皋县| 临沭县| 萨嘎县| 阜宁县| 上思县| 出国| 舟山市| 衡山县| 惠来县| 华蓥市| 贵阳市| 元谋县| 太和县| 汕头市| 大荔县| 乌鲁木齐县| 广南县|