1

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 の可能性があります (少なくとも 1 つ存在します)

更新:コードでは、このようなものを記述します(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;
    }
}
4

2 に答える 2

0

同じレコードを更新しようとしない限り、単一のクエリでこれを簡単または効率的に行う方法はありません。それ以外の場合、これが望ましい結果であると仮定すると、次のような OR (または必要に応じて AND) ステートメントを使用できます。

UPDATE Order 
SET ListName1=?, ListName2=?, ListName3=? 
WHERE MarketId1=? OR  MarketId2=? OR MarketId3=?

また、テーブルを更新して 1 対多の関係を使用することを検討することもできます。これにより、クエリがより簡単になります。例えば:

Order
-------- 
id (key)
name
etc

Market_List
--------
id (key)
order_id (fk)
market
listname
于 2013-06-05T15:21:57.727 に答える
0

カンマ区切りの更新を使用できます

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

これは、1 つの更新クエリとして期待するものですか?

于 2013-06-05T13:20:49.363 に答える