天天看點

一個DAO方法中如何完成不确定個數的條件查詢

寫了那麼多程式, 是一個按鈕, 一個查詢條件 或者查詢的目的表格 , 都會寫一個獨立的方法。 從來就沒有想過要讓一個 不确定個數的查詢條件的 sql 語句 寫在同一個方法中。

        今天算是實作了 一個全寫完了 貼上來 。

          先不管那麼多了 ,先看一個sql 語句,   select fwid , title , zj , date , uid  from tbl_fwxx , tbl_jd "where "

      "tbl_fwxx.jdid=tbl_jd.jdid       

     我恐怕要先問自己了 ,這是什麼玩意, 首先注意這裡的2個表 , tbl_fwxx (房屋資訊表) 和 tbl_jd (接到資訊表) 他們2個表之間有有主外鍵的關系  就是 tbl_fwxx.jdid=tbl_jd.jdid      , 這裡又要問了 , 這有什麼用啊? 加了這個條件和沒加是一樣的  . 都是查詢的全部資訊 .  一開始我也那麼想的, 但是做到後面 才發現, 程式中之是以這樣寫一個sql語句  是有着兩重考慮的 .

     其一就是 ,做好這樣一個鋪墊, 為後面的

     if(house.getTitle() != null){

   sql += " and tbl_fwxx.title like '%"+house.getTitle()+"%'";

  }

  if(house.getCity().getQxid() != 0){

   sql += " and tbl_jd.qxid = '"+house.getCity().getQxid()+"' ";

  }

      做準備 , 因為在沒有任何查詢條件的情況下 ,  這樣的寫法是Ok的,   select fwid , title , zj , date , uid  from tbl_fwxx , tbl_jd   , 但是萬一 有了一個模糊查詢 或者 多個查詢條件, 我們該怎麼樣靈活地處理 sql 語句 呢?

      難道像這樣  if(house.getTitle() != null){

   sql += "  where  tbl_fwxx.title like '%"+house.getTitle()+"%'";

  }

每個if 判斷中的 開頭都先寫個 where , 去掉 and ???  那好,,

這也隻是在出現有某一時刻隻有一個查詢條件的情況下, 那要是兩個查詢條件呢? 或者是三個四個呢?

  每個if 語句中 都這樣寫 ?  sql += "  where  tbl_fwxx.title like '%"+house.getTitle()+"%'";  

   每個前面都寫成 where    ,來吧 來組合一下看看吧  , 就以同時有三個查詢條件為例 , 看看sql 語句是什麼樣子的.

    select fwid , title , zj , date , uid  from tbl_fwxx , tbl_jd "where "

      "tbl_fwxx.jdid=tbl_jd.jdid    where   tbl_fwxx.title like '%"+house.getTitle()+"%'   where tbl_jd.qxid =

'"+house.getCity().getQxid()+"'      

       試問 , 有哪一款資料庫能夠編譯這樣的sql 語句?   我服他 , 所有這裡就顯示出  書中 寫成

where tbl_fwxx.jdid=tbl_jd.jdid  

   的高明之處了 .

     那這是其一, 其二就是 : 在資料庫表中, 與btl_fwxx(房屋資訊表) 有主外鍵的關系有另外三個表, 但是為什麼選擇了 三個中的 tbl_jd  呢?  是偶然麼?  不是 , 選擇 tbl_jd  有一點優勢 是另外兩個表所無法比拟的 .  那麼就是tbl_jd  表中的一個列 qxid  是另外一個 表 tbl_qx (區縣表) 的外鍵,(tbl_qx 與 tbl_fwxx沒有主外鍵關系)  

      ,但是在程式中是需要tbl_qx資料的 , 那就通過tbl_jd 來查詢出 jdid 就Ok 了 ,省了很多事情,

     當然 加入這麼寫也是可以的 , select fwid , title , zj , date , uid  from tbl_fwxx , tbl_jd , tbl_qx  where tbl_fwxx.jdid=tbl_jd.jdid and tbl_qx.qxid = 2

瞧 , 這裡在from 後面 where 前面寫了 表明 tbl_qx 也是可以的,  我試驗正常查出了資料.