区分插入和更新

时间:2011-07-15 03:12:35

标签: java jsf jdbc

我有一个JSF页面,我有输入字段,值正在保存到数据库。

我想做插入和更新。 区分插入和更新的最佳方法是什么,我不想使用标志。 我的意思是如果flag是“I”,那么insert else标志是“U”然后更新。

最好像ID不为null,然后调用insert方法,否则为null,然后调用update方法。 ID是我的主键,它是自动生成的。

我使用的是JSF 1.1,数据库是Oracle 10g。

3 个答案:

答案 0 :(得分:1)

这不是jsf的典型问题,而是标准设计问题。我已经看到这是通过以下方式处理的。

  1. 获取ID并调用select查询。如果查询返回任何结果,请执行更新,否则执行插入。
  2. 更新,然后检查受影响的行。如果为0则插入。或者,插入然后检查主键异常。如果抛出异常则更新。
  3. 如果您的数据库允许,请使用集成的更新或插入。这可以使用merge关键字在Oracle中完成。
  4. 使用旗帜,但那很难看。
  5. 始终执行逻辑删除并插入。这当然是一个更大的设计决策,并且在具有非常严格的审计要求的应用程序中实现。

答案 1 :(得分:0)

you can do  like this....



<h:commandButton value="Update" action="#{bean.updateAction}"
                                                         rendered="#{bean.ID eq ''}"/>
      <h:commandButton value="Add" action="#{bean.saveAction}" 
                                                         rendered="#{bean.ID ne ''}">

    where id is an attribute in your backing bean initiated with empty string.        

答案 2 :(得分:0)

由于您尚未发布任何代码,并且您的应用程序描述对我来说都不合适,我只能建议使用包含最终使用h:inputHidden呈现的标志的隐藏表单字段标签。当然,没有什么可以阻止任何人在回发发生时将标志的值从U更改为I.毕竟,这是JSF 1.1,并且没有视图范围的概念。

但是,您可以使用会话范围来存储值,而不是隐藏的表单字段,但是当您不再需要时,必须清除这些值。