我在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;
}
}
答案 0 :(得分:0)
您可以使用更新逗号分隔
UPDATE <TABLE>
SET COL1 = <VAL1>,
COL2= <VAL2>
WHERE <CONDITION>
这是您期望的更新查询吗?
答案 1 :(得分:0)
除非您尝试更新相同的记录,否则无法在单个查询中轻松或高效地执行此操作。否则,假设这是期望的结果,您可以使用OR(或者如果需要的话)语句,例如:
UPDATE Order
SET ListName1=?, ListName2=?, ListName3=?
WHERE MarketId1=? OR MarketId2=? OR MarketId3=?
您可能还会考虑更新您的表以使用one:many关系,这可能会使您的查询更容易。例如:
Order
--------
id (key)
name
etc
Market_List
--------
id (key)
order_id (fk)
market
listname