1

Java で準備されたステートメントを使用して、以下の SQL テーブルを更新するための最適なコーディング パターンを探しています。

SQL テーブル名は table1 であり、attr1、att2、att3、att4、attr5 および .... が table1 にあります。

現在、私の疑似

If (want to update att1 only) {
    PreparedStatement pst = Connection.prepareStatement("UPDATE table1 SET attr1 = ?");
} else if (want to update attr1 & attr2 only) {
    PreparedStatement pst = Connection.prepareStatement("UPDATE table1 SET attr1 = ?, attr2 = ?");
} else if (want to update attr1 & attr2 & attr3) {
    PreparedStatement pst = Connection.prepareStatement("UPDATE table1 SET attr1 = ?, attr2 = ?, attr3 = ?");
}  else if (want to udpate attr1 & attr3) {
   PreparedStatement pst = Connection.prepareStatement("UPDATE table1 SET attr1 = ?, attr3 = ?");
} ......

.... else {
    Bad Request
}

この上記のコードは、WHERE SQL 条件をより複雑にします。ここでの if - else if - else パターンは好きではありません。維持するのが非常に難しいからです。

はい、他のオプションが動的に UPDATE SQL クエリを生成し、ORM ソリューションを使用することを知っています。SQL UPDATE クエリ ロジックを動的に生成すると、複雑になると思います。

ここに最適な他のパターンまたはソリューションを提供してください。

4

1 に答える 1

1

すべての非キー フィールドを更新する更新ステートメントを 1 つ記述し、毎回それを呼び出すことができます。

public class MyThing {
     private long uniqueID;
     private String attr1;
     private String attr2;
     private String attr3;
     // ++ rest of attriutes, getters and setters  
}

public MyThing getMyThing(long uniqueID) {
    // code to retrieve MyThing from table1, poulating all attributes
}

public void updateMyThing(MyThing myThing) {
    PreparedStatement pst = Connection.prepareStatement
        (" UPDATE table1 SET attr1 = ?, attr2 = ?, attr3 = ?, attr4 = ?, attr5 = ?" +
         " WHERE id = ? );
    pst.SetString(1, myThing.getAttr1());
    pst.SetString(2, myThing.getAttr2());
    pst.SetString(3, myThing.getAttr3());
    pst.SetString(4, myThing.getAttr4());
    pst.SetString(5, myThing.getAttr5());
    pst.SetString(6, myThing.getId());

    // etc.
}

したがって、DB から MyThing オブジェクトを取得します。必要な属性を更新してから update メソッドを呼び出します。変更されたかどうかに関係なく、すべての属性が更新されました

于 2013-03-30T22:10:33.587 に答える