1

我希望能够更新 oracle 数据库中表中行的部分内容。该数据库有一个数字(这是主键)和 5 个其他列。

该方法获取一个对象并将其与数据库中具有相同主键的对象进行比较。然后它应该比较列并更改已更改的列。我想到了几种不同的方法来做到这一点:

  • 对每一个可能的变化排列进行检查(这样做的方法很长)。

例如:

    public boolean updateOrder(Order o, Connection con) {
    int rowUpdated = 0;
    String SQLString = "";
    Order origOrder = getOrder(o.getOno(), con);

    if (origOrder.getCustomerNo() != o.getCustomerNo()
            && origOrder.getEmployeeNo() == o.getEmployeeNo()
            && origOrder.getReceived().compareTo(o.getReceived()) == 0
            && origOrder.getBeginDate().compareTo(o.getBeginDate()) == 0
            && origOrder.getEndDate().compareTo(o.getEndDate()) == 0
            && origOrder.getProjectLocation().compareTo(o.getProjectLocation()) == 0) {

        SQLString = "UPDATE ORDERS SET "
                + "CNO = " + o.getCustomerNo()
                + "where ONO = " + o.getOno();

    }

    PreparedStatement statement = null;

    try {
        //== insert value----- Unit of work start
        con.setAutoCommit(false);
        statement = con.prepareStatement(SQLString);
        rowUpdated = statement.executeUpdate();

    etc...
  • 每次都改变一切(很简单,但我担心它可能会出错)。

有没有人有这样做的聪明方法?

4

1 回答 1

1

为什么要检查已更改的内容?只需执行更新。

如果您确实需要进行检查,请将比较逻辑推送到 Order 类的方法中。

if(origOrder.hasChanged(o)) {
    // perform update
}

像 o 这样的 PS 变量名称不是很有意义或有用。

于 2013-11-11T21:21:44.690 回答