隨筆-39  評論-33  文章-0  trackbacks-0
           

          從運(yùn)用角度來理解newxyDAOupdate方法

          胡立新

          關(guān)于newxyDAOupdate是更新還是插入,文檔中有說明。在此談運(yùn)用中的一些情況:

              1jsp面表上有表單<nhtml:form ...>...</nhtml:form><html:form ...>...</html:form>,但之前沒有經(jīng)查詢或其它方法得到formBean。這時標(biāo)簽會實(shí)例化一個formBean。由于沒有數(shù)據(jù),用戶看到的是空白頁,填入數(shù)據(jù)后,update作插入操作,這是因?yàn)橹麝P(guān)鍵字值為空,除非用戶顯式地賦給主關(guān)鍵字值存在于表中。

              2、用戶點(diǎn)擊了“新建”銨鈕,<logic:action1/>會將formBeanHashMap類型的values清空(除保留屬性),表單值均來源于此values,隨后表單顯示的也是空白頁。update后作插入操作,除非用戶顯式地賦給主關(guān)鍵字值存在于表中。

              3、用戶點(diǎn)擊了“編輯”(文字可設(shè))銨鈕,<logic:action1/>會將formBean中選定的那條記錄putformBeanvalues中,用戶看到的表單中是這條記錄數(shù)據(jù),其中包含了主關(guān)鍵字屬性值對。update后作更新操作。

             

           

          DAOupdate方法 (摘自DAO類+通用持久類,實(shí)現(xiàn)數(shù)據(jù)增、刪、改、查)

          newxy(新坐標(biāo))在設(shè)計數(shù)據(jù)插入與更新的方法時采用了DelphiC++Builder數(shù)據(jù)更新策略,DataSet有個方法ApplyUpdates,如果是在組件中新增一行,作插入操作,如果是對組件中某條記錄數(shù)據(jù)更改,作更新操作。newxy(新坐標(biāo))net.newxy.dbm.DBM有個update(Object dto)方法,如果持久類對象不含主關(guān)鍵字段值,或所含主關(guān)鍵字段值在表中已存在,作插入操作,如果含有的主關(guān)鍵字段值表中已存在,作更新操作。

          1. 數(shù)據(jù)插入:Object update(Object dto) throws Exception;

          舉例:

              try{

          net.newxy.dbm.BaseDAO dao=new net.newxy.dbm.BaseDAO();

          net.newxy.dbm.DynaDto dynaDto=new net.newxy.dbm.DynaDto();

                  dynaDto.set_table("table1");//設(shè)置表名

                  dynaDto.set(“field1”,”……”);//為字段field1賦值

                  dynaDto.set(“field2”,”……”);//為字段field2賦值

                  Object result=dao.update(dynaDto);

              }catch(Exception e){

                  ......

          }

          例中兩字段field1field2不是主關(guān)鍵字段,不用設(shè)置主關(guān)鍵段值,主關(guān)鍵字段值會自動得到,是原有最大值加一。

          如果設(shè)置主關(guān)鍵字段值,如:dynaDto.set(“id”,”100”);newxy(新坐標(biāo))會檢查賦給的主關(guān)鍵字值是否已存在,如果存在,作更新(update)操作,如果不存在,作插入(insert)操作。

          判斷是更新還是插入操作,可以根據(jù)返回的result值來判斷,如果result值為空,是作更新操作,如果result不空是作插入操作。

          Object result=dao.update(dynaDto);

          如果想需要知道自動賦給的主關(guān)鍵字段值,可以用如下方法:

                  Object result=dao.update(dynaDto);

                  Object idValue=null;

                  If(result!=null)

          idValue=((DynaDto)result).get(“id”);

                      idValue就是自動賦給的主關(guān)鍵字段值。

          2. 數(shù)據(jù)更新:

              try{

          net.newxy.dbm.BaseDAO dao=new net.newxy.dbm.BaseDAO();

          net.newxy.dbm.DynaDto dynaDto=new net.newxy.dbm.DynaDto();

                  dynaDto.set_table("table1");//設(shè)置表名

                  dynaDto.set(“id”,”……”);//為主關(guān)鍵字段賦值

                  dynaDto.set(“field1”,”……”);//為字段field1賦值

                  dynaDto.set(“field2”,”……”);//為字段field2賦值

                  Object result=dao.update(dynaDto);

              }catch(Exception e){

                  ......

          }

          與數(shù)據(jù)插入相比增加了dynaDto.set(“id”,value)作用是為主關(guān)鍵字段賦值。

          需注意:如果dynaDto.set(“id”,value)賦給的value在數(shù)據(jù)庫表中已存在,dao.update(dynaDto)方法仍然作更新操作。

           

          newxy新坐標(biāo)技術(shù)網(wǎng)站:http://www.newxy.net

          posted on 2007-04-13 23:53 newxy新坐標(biāo) 閱讀(992) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 兴和县| 炉霍县| 伊宁县| 石楼县| 松桃| 肇州县| 台北县| 桂东县| 斗六市| 道真| 保定市| 阿勒泰市| 柘荣县| 明溪县| 宜都市| 平湖市| 宝清县| 黄大仙区| 鄂托克旗| 新竹市| 桂平市| 兴国县| 西城区| 通海县| 孙吴县| 木里| 永安市| 岫岩| 平舆县| 隆化县| 高州市| 庄浪县| 金华市| 海原县| 望都县| 全椒县| 建宁县| 舒城县| 常州市| 密山市| 泉州市|