public?void?updateGoddess(Goddess?goddess)?throws?SQLException{
????????Connection?conn?=?DBUtil.getConnection();????
????????StringBuilder?sql=new?StringBuilder();
????????sql.append("update?femalegod?set?");
????????//這個comFlag標(biāo)記用來確定是否要在拼接語句時加逗號
????????boolean?comFlag=false;
????????
????????//如果本屬性非空,后面的屬性拼接時必然要加逗號,所以comFlag賦值為true
????????if?(goddess.getUserName()!=null){
????????????sql.append("username=?");
????????????comFlag=true;
????????}
????????
????????//如果本屬性非空,且comFlag為false,說明本屬性為set關(guān)鍵字后第一個設(shè)置,則前面無需加逗號,
????????//同時由于本屬性非空,說明后面如果有要拼接的屬性,必須有逗號,所以設(shè)置comFlag為true
????????if?(goddess.getAge()!=null){
????????????if?(comFlag)????????
????????????????sql.append(",age=?");//comFlag為真,說明前面已有待更新的屬性,因此要在最前面加逗號
????????????else{
????????????????sql.append("age=?");//comFlag為假,前面還沒有待更新屬性,本屬性為第一個待更新的,無需在前面加逗號
????????????????comFlag=true;???????//如果后面還有屬性要更新,那個屬性前需要加逗號,因此在這里設(shè)置comFlag為true
????????????}
????????}
????????????
????????if?(goddess.getBirthday()!=null){
????????????if?(comFlag)
????????????????sql.append(",birthday=?");
????????????else{
????????????????sql.append("birthday=?");
????????????????comFlag=true;
????????????}
????????}
????????if?(goddess.getEmail()!=null){
????????????if?(comFlag)
????????????????sql.append(",email=?");
????????????else{
????????????????sql.append("email=?");
????????????????comFlag=true;
????????????}
????????}
????????if?(goddess.getMobile()!=null){
????????????if?(comFlag)
????????????????sql.append(",mobile=??");
????????}
????????????
????????sql.append("?where?id=?");
????????
????????System.out.println(sql.toString());
????????PreparedStatement?ps=conn.prepareStatement(sql.toString());
????????
????????//i為參數(shù)索引值
????????int?i=0;
????????
????????//為前面的sql語句里的?號取對應(yīng)的屬性值,如果屬性為空,則不需要更新,跳過,否則,提取屬性值
????????if(goddess.getUserName()!=null)
????????????ps.setString(++i,?goddess.getUserName());
????????if(goddess.getAge()!=null)
????????????ps.setInt(++i,?goddess.getAge());
????????if(goddess.getBirthday()!=null)
????????????ps.setDate(++i,?new?Date(goddess.getBirthday().getTime()));
????????if(goddess.getEmail()!=null)
????????????ps.setString(++i,?goddess.getEmail());
????????if(goddess.getMobile()!=null)
????????????ps.setString(++i,?goddess.getMobile());
????????ps.setInt(++i,?goddess.getID());
????????
????????ps.execute();
????????ps.close();
????}
2016-08-07
上面“不然變成where?1=1?username?like?"xiao%"就出錯了”忘了加注釋符,復(fù)雜查詢我只做了如上測試,因為時間關(guān)系(后面有太多課程要學(xué),不想在一個項目上糾纏太久),沒有在視圖層的代碼里做相應(yīng)改動以便用戶可以在前臺輸入復(fù)雜多個查詢,有興趣有時間的童鞋可以試試,有問題大家再來一起交流討論
2016-08-07
根據(jù)姓名或手機查詢女神,這個方法我本來根據(jù)老師上課的要求做了點擴充,可以根據(jù)多個條件的與或進行查詢,課程看到最后發(fā)現(xiàn)項目的要求其實很簡單,只按單個條件查詢,而且限定在手機或姓名,既然前面復(fù)雜條件能查詢到,簡單查詢當(dāng)然更可以,所以我也沒改這部分,功能一樣能實現(xiàn)。
2016-07-22
你的根據(jù)姓名和手機號查詢女神部分是怎么寫的????
2016-07-19
看起來好繁瑣。
2016-07-02
求教返回主菜單
2016-07-02
實際開發(fā)中,要修改對象,肯定是要讀到一個對象再修改,所以我覺得可以不用做判斷的
=================================
你的意思是假如我只更新一個屬性,譬如
update 某表 set 屬性=? where 條件
但在這種情況下我也得把SQL語句寫全了
update 某表 set 屬性1=?,屬性2=?,屬性3=?。。。。 where 條件
即使大部分屬性不用更新,也得拿原來的值再賦一遍?這當(dāng)然也算個辦法,只是我本想著有沒有更妙的寫法,可以寫得比較符合實際,不用加一堆沒必要的賦值,就像老師的課程里提到的where 1=1那個小技巧?,F(xiàn)在看來是沒有這種技巧,要么就很笨很啰嗦像我這樣挨個判斷挨個拼接,要么就不管三七二十一,所有屬性都更新一遍,即使值不變?其實后一種情況這里處理起來也很麻煩,如果我從控制臺得到一個更新屬性,其余都為空的話,我是不是還得用一個select語句找到對應(yīng)的這條記錄,把它的屬性值全部取出來,除了要更新的那個屬性,其余屬性都得原樣填到上一個update對應(yīng)的問號里去?
2016-07-02
實際開發(fā)中,要修改對象,肯定是要讀到一個對象再修改,所以我覺得可以不用做判斷的
2016-07-01
/**
* 修改
* @throws SQLException
*/
public void updateGoddess(Goddess goddess) throws SQLException {
String sql = " update imooc_goddess "
+ " set user_name=?,sex=?,age=?,birthday=?,email=?,mobile=?,"
+ " update_user=?,update_date=current_date(),isdel=? where id=?";
PreparedStatement ptmt = conn.prepareStatement(sql);
ptmt.setString(1, goddess.getUser_uame());
ptmt.setInt(2, goddess.getSex());
ptmt.setInt(3, goddess.getAge());
ptmt.setDate(4, new Date(goddess.getBirthday().getTime()));
ptmt.setString(5, goddess.getEmail());
ptmt.setString(6, goddess.getMobile());
ptmt.setString(7, goddess.getUpdate_user());
ptmt.setInt(8, goddess.getIsdel());
ptmt.setInt(9, goddess.getId());
ptmt.execute();
}
拿到要修改的對象,再把對要修改的屬性象重新賦值,再保存進去,直接操作對象。(這里只是所有屬性都有值的情況下,有NULL值的時候要自己做驗證判斷)
2016-07-01
不建議這樣寫,太亂。
建議把各個功能分別封裝在不同方法中,在主程序中去調(diào)用各個方法去實現(xiàn)對應(yīng)功能
public void operatlin_query() throws Exception{//查詢所有
public void operatlin_get(Integer id) throws SQLException{//查詢單個
public void operatlin_add() throws Exception{//添加
public void operatlin_update() throws Exception{//更新
public void operatlin_delete() throws Exception{//刪除
public void operatlin_search() throws Exception{//根據(jù)姓名、手機號來查詢
while(true){
? ? if(){
? ? ? ? ? ?//“if”判斷輸入主菜單命令,在語句中直接調(diào)用對應(yīng)方法
? ? } else if(){
? ? }else if(){
? ? }..............
}
這樣寫看起來有條理些,便于以后優(yōu)化