第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定

把剩下的功能都完成了,代碼太長,不全貼,就貼出最復(fù)雜的更新功能,自己感覺邏輯上特別啰嗦,但當(dāng)局者迷自己也想不出怎樣優(yōu)化,貼出來看看有沒有好的建議

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();
????}


正在回答

9 回答

上面“不然變成where?1=1?username?like?"xiao%"就出錯了”忘了加注釋符,復(fù)雜查詢我只做了如上測試,因為時間關(guān)系(后面有太多課程要學(xué),不想在一個項目上糾纏太久),沒有在視圖層的代碼里做相應(yīng)改動以便用戶可以在前臺輸入復(fù)雜多個查詢,有興趣有時間的童鞋可以試試,有問題大家再來一起交流討論

0 回復(fù) 有任何疑惑可以回復(fù)我~

根據(jù)姓名或手機查詢女神,這個方法我本來根據(jù)老師上課的要求做了點擴充,可以根據(jù)多個條件的與或進行查詢,課程看到最后發(fā)現(xiàn)項目的要求其實很簡單,只按單個條件查詢,而且限定在手機或姓名,既然前面復(fù)雜條件能查詢到,簡單查詢當(dāng)然更可以,所以我也沒改這部分,功能一樣能實現(xiàn)。

public?List<Goddess>?queryGoddessList(List<Map<String,Object>>?params)?throws?SQLException{
????????Connection?conn?=?DBUtil.getConnection();????????
????????List<Goddess>?gs?=?new?ArrayList<Goddess>();
????????Goddess?g?=?null;
????????
????????StringBuffer?sb?=?new?StringBuffer();
????????sb.append("select?*?from?femalegod?where?1=1");?//設(shè)置?1=1這個永遠為真的條件是為了和下面的田間查詢做拼接
????????
????????if(params!=null?&&?params.size()>0){?//判斷查詢參數(shù)列表非空
????????????for(int?i=0;i<params.size();i++){
????????????????Map<String,Object>?param?=?params.get(i);//依次取出查詢參數(shù)
????????????????sb.append("?"+param.get("connector")+"?"+param.get("name")+"?"+param.get("rela")+"?"+"'"+param.get("value")+"'");
????????????}//對參數(shù)做拼接,connector存放連接符&&或||,name存放查詢字段名,rela存放關(guān)系符=,>,等等,value存放字段值
????????}
????????
????????System.out.println(sb.toString());?//輸出拼接后的sql查詢語句便于調(diào)試糾錯
????????
????????/**
?????????*?以下部分為常規(guī)操作,對查詢得到的結(jié)果集依次放入對象
?????????*?并添加進list,返回
?????????*/
????????PreparedStatement?ps=conn.prepareStatement(sb.toString());
????????ResultSet?rs=ps.executeQuery();
????????while(rs.next()){
????????????g?=?new?Goddess();
????????????g.setID(rs.getInt("ID"));
????????????g.setUserName(rs.getString("username"));
????????????g.setAge(rs.getInt("age"));
????????????g.setBirthday(rs.getDate("birthday"));
????????????g.setEmail(rs.getString("email"));
????????????g.setMobile(rs.getString("mobile"));
????????????gs.add(g);
????????}
//????????
????????return?gs;
????}
如果也想試試復(fù)雜查詢的效果,我這里寫了個測試?yán)?,根?jù)三個條件姓名,年齡,及生日查詢

public?static?void?main(String[]?args)?throws?SQLException?{
????????
????????GoddessMethod?gsMethod?=?new?GoddessMethod();
????????
????????List<Map<String,Object>>?params?=?new?ArrayList<Map<String,Object>>();
????????//設(shè)計的查詢例子:username?like?"xiao%"?or?age=20?or?birthday=1994-01-01
????????
????????//第一套參數(shù):?and?username?like?"xiao%",?最前面放一個and是為了跟查詢方法里的where?1=1?拼接上
????????不然變成where?1=1?username?like?"xiao%"就出錯了
????????Map<String,Object>?param?=?new?HashMap<String,Object>();
????????param.put("connector",?"and");
????????param.put("name",?"username");
????????param.put("rela",?"like");
????????param.put("value",?"'xiao%'");????????
????????params.add(param);

????????//第二套參數(shù):?age?=?20
????????param?=?new?HashMap<String,Object>();
????????param.put("connector",?"or");
????????param.put("name",?"age");
????????param.put("rela",?"=");
????????param.put("value",?"20");
????????params.add(param);
????????
????????//第三套參數(shù):?birthday?=?1994-01-01
????????param?=?new?HashMap<String,Object>();
????????param.put("connector",?"or");
????????param.put("name",?"birthday");
????????param.put("rela",?"=");
????????param.put("value",?"to_date('1994-01-01','yyyy-mm-dd')");
????????params.add(param);
????????
????????//輸出params對象里存放的參數(shù),查看是否正確
????????for?(int?i=0;i<params.size();i++){
????????????System.out.println(params.get(i).get("connector")+"?"+params.get(i).get("name")+"?"+params.get(i).get("rela")+"?"+params.get(i).get("value"));
????????}
????????
????????//調(diào)用查詢方法,并輸出
????????List<Goddess>?gs?=?gsMethod.queryGoddessList(params);
????????for(Goddess?g:?gs){
????????????System.out.println(g.getUserName()+","+g.getAge());
????????}


0 回復(fù) 有任何疑惑可以回復(fù)我~

你的根據(jù)姓名和手機號查詢女神部分是怎么寫的????

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

紅袖侍讀 提問者

代碼貼在下面
2016-08-07 回復(fù) 有任何疑惑可以回復(fù)我~

看起來好繁瑣。

0 回復(fù) 有任何疑惑可以回復(fù)我~

求教返回主菜單

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

紅袖侍讀 提問者

按正常邏輯,你如果維持在某一功能里靠的是previous這個變量對不對,如果要返回主菜單,把previous清空設(shè)回null就行了。但其實按本作業(yè)老師的這種寫法,所有的條件都是或的關(guān)系,你如果把返回主菜單的那個if判斷語句寫在最前面,任何時候只要輸入B就能進入主菜單了,甚至都不需要判斷previous
2016-07-02 回復(fù) 有任何疑惑可以回復(fù)我~

實際開發(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)的問號里去?

0 回復(fù) 有任何疑惑可以回復(fù)我~

實際開發(fā)中,要修改對象,肯定是要讀到一個對象再修改,所以我覺得可以不用做判斷的

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

紅袖侍讀 提問者

我的回復(fù)有點長,小回復(fù)框?qū)懖幌?,我放在下面?/div>
2016-07-02 回復(fù) 有任何疑惑可以回復(fù)我~

/**

* 修改

* @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值的時候要自己做驗證判斷)

0 回復(fù) 有任何疑惑可以回復(fù)我~

不建議這樣寫,太亂。

建議把各個功能分別封裝在不同方法中,在主程序中去調(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)化

0 回復(fù) 有任何疑惑可以回復(fù)我~
#1

紅袖侍讀 提問者

擦汗,我就是把各功能分拆在不同函數(shù)里寫的啊,上面貼的僅僅是更新功能|||||
2016-07-01 回復(fù) 有任何疑惑可以回復(fù)我~

舉報

0/150
提交
取消

把剩下的功能都完成了,代碼太長,不全貼,就貼出最復(fù)雜的更新功能,自己感覺邏輯上特別啰嗦,但當(dāng)局者迷自己也想不出怎樣優(yōu)化,貼出來看看有沒有好的建議

我要回答 關(guān)注問題
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號