寫了那麼多程式, 是一個按鈕, 一個查詢條件 或者查詢的目的表格 , 都會寫一個獨立的方法。 從來就沒有想過要讓一個 不确定個數的查詢條件的 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 也是可以的, 我試驗正常查出了資料.