随笔-39  评论-33  文章-0  trackbacks-0
 

从运用角度来理解newxyDAOupdate方法

胡立新

关于newxyDAOupdate是更新还是插入,文档中有说明。在此谈运用中的一些情况:

    1jsp面表上有表单<nhtml:form ...>...</nhtml:form><html:form ...>...</html:form>,但之前没有经查询或其它方法得到formBean。这时标签会实例化一个formBean。由于没有数据,用户看到的是空白页,填入数据后,update作插入操作,这是因为主关键字值为空,除非用户显式地赋给主关键字值存在于表中。

    2、用户点击了“新建”铵钮,<logic:action1/>会将formBeanHashMap类型的values清空(除保留属性),表单值均来源于此values,随后表单显示的也是空白页。update后作插入操作,除非用户显式地赋给主关键字值存在于表中。

    3、用户点击了“编辑”(文字可设)铵钮,<logic:action1/>会将formBean中选定的那条记录putformBeanvalues中,用户看到的表单中是这条记录数据,其中包含了主关键字属性值对。update后作更新操作。

   

 

DAOupdate方法 (摘自DAO类+通用持久类,实现数据增、删、改、查)

newxy(新坐标)在设计数据插入与更新的方法时采用了DelphiC++Builder数据更新策略,DataSet有个方法ApplyUpdates,如果是在组件中新增一行,作插入操作,如果是对组件中某条记录数据更改,作更新操作。newxy(新坐标)net.newxy.dbm.DBM有个update(Object dto)方法,如果持久类对象不含主关键字段值,或所含主关键字段值在表中已存在,作插入操作,如果含有的主关键字段值表中已存在,作更新操作。

1. 数据插入: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");//设置表名

        dynaDto.set(“field1”,”……”);//为字段field1赋值

        dynaDto.set(“field2”,”……”);//为字段field2赋值

        Object result=dao.update(dynaDto);

    }catch(Exception e){

        ......

}

例中两字段field1field2不是主关键字段,不用设置主关键段值,主关键字段值会自动得到,是原有最大值加一。

如果设置主关键字段值,如:dynaDto.set(“id”,”100”);newxy(新坐标)会检查赋给的主关键字值是否已存在,如果存在,作更新(update)操作,如果不存在,作插入(insert)操作。

判断是更新还是插入操作,可以根据返回的result值来判断,如果result值为空,是作更新操作,如果result不空是作插入操作。

Object result=dao.update(dynaDto);

如果想需要知道自动赋给的主关键字段值,可以用如下方法:

        Object result=dao.update(dynaDto);

        Object idValue=null;

        If(result!=null)

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

            idValue就是自动赋给的主关键字段值。

2. 数据更新:

    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");//设置表名

        dynaDto.set(“id”,”……”);//为主关键字段赋值

        dynaDto.set(“field1”,”……”);//为字段field1赋值

        dynaDto.set(“field2”,”……”);//为字段field2赋值

        Object result=dao.update(dynaDto);

    }catch(Exception e){

        ......

}

与数据插入相比增加了dynaDto.set(“id”,value)作用是为主关键字段赋值。

需注意:如果dynaDto.set(“id”,value)赋给的value在数据库表中已存在,dao.update(dynaDto)方法仍然作更新操作。

 

newxy新坐标技术网站:http://www.newxy.net

posted on 2007-04-13 23:53 newxy新坐标 阅读(973) 评论(0)  编辑  收藏

只有注册用户登录后才能发表评论。


网站导航: