写了那么多程序, 是一个按钮, 一个查询条件 或者查询的目的表格 , 都会写一个独立的方法。 从来就没有想过要让一个 不确定个数的查询条件的 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 也是可以的, 我试验正常查出了数据.