我在H2 DB中有一张桌子

Order
--------
id (key)
MarketId1
MarketId2
MarketId3
ListName1
ListName2
ListName3


从XML,我得到ListOrder的列表

public final class ListOrder
{
     public long listId;
     public String Name;
}


所以我准备了3条陈述

"UPDATE Order set " + ListName1 + " = ? WHERE " + MarketId1 + " = ?"
"UPDATE Order set " + ListName2 + " = ? WHERE " + MarketId2 + " = ?"
"UPDATE Order set " + ListName3 + " = ? WHERE " + MarketId3 + " = ?"


在方法中,我准备要执行的PreparedStament列表

final PreparedStatement statement1 = connection.prepareStatement(QUERY1);
final PreparedStatement statement2 = connection.prepareStatement(QUERY2);
final PreparedStatement statement3 = connection.prepareStatement(QUERY3);

    for (ListOrder listOrder: listOrders)
    {
        statement1.setString(1, listOrder.Name);
        statement1.setLong(2, listOrder.listId);
        statement1.addBatch();

        statement2.setString(1, listOrder.Name);
        statement2.setLong(2, listName.listId);
        statement2.addBatch();

        statement3.setString(1, listName.Name);
        statement3.setLong(2, listOrder.listId);
        statement3.addBatch();
    }

    return new ArrayList<PreparedStatement>(){{add(statement1); add(statement2); add(statement3);}};


我是SQL菜鸟。有什么更好的方法吗?我假设MarketId 1 2 3可以相同。 ListNames可以为null(至少有一个)

更新:
在代码中,我会写这样的东西(对HashMap的可能更改)

for (ListOrder listOrder: listOrders)
{
    for(Order order : orders)
    {
         if(order.marketID1 == listOrder.listID)
              order.listName1 = listOrder.Name; //break if no dups
         if(order.marketID2 == listOrder.listID)
              order.listName2 = listOrder.Name;
         if(order.marketID3 == listOrder.listID)
              order.listName3 = listOrder.Name;
    }
}

最佳答案

您可以使用更新逗号分隔

UPDATE <TABLE>
SET COL1 = <VAL1>,
COL2= <VAL2>
WHERE <CONDITION>


这是您作为一次更新查询所期望的吗?

关于java - 一个SQL查询中的多个更新,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16941020/

10-14 13:55
查看更多