0

私のデータベーステーブルスキーマは次のようなものです

DocumentID: Name1: Name2: Name3: Name4: Location1: Location2: Location3....:Organization1:..

これで、上記の値を持つ 3 つのハッシュセットが利用可能になりました (つまり、名前用、場所用、および組織用に 1 つ)。

ループの反復ごとに、これらのハッシュセットに上記の値が入力されます。

各反復の終わりに、これらのハッシュセットからのデータが削除され、新しいハッシュセットが作成されます。

今私の問題は、これらのハッシュセット値からSQLテーブルの行(各反復ごとに1行だけ)を作成する必要がある反復ごとです。

私が理解できないのは、単に次のようなものを使用できるよりも、ハードコードされた文字列がある場合です。

String sql = "INSERT INTO Table " +
               "VALUES ('100', 'Zara', 'Akli', '18','100', 'Zara', 'Ali', '18')";

ただし、各ハッシュセットを反復処理し、3 つのハッシュセットすべてのデータを 1 つの行に (上記のように) 挿入する必要があります。私はそのような声明をどのように書くかについて混乱しています。テーブルは最初は完全に空であるため、where 句を使用できないことを思い出してください ("insert into...where documentID="23423" など)。

4

2 に答える 2

1

これらのセットを次のように作成したと仮定します。

long DocumentId
names {"A", "B", "C"}
location {"1", "2", "3"}
and so on...

最も簡単なのは、実行する SQL を動的に構築することだと思います。

{
...
    StringBuilder sb = new StringBuilder("insert into mytable (");
    List<Object> params = new ArrayList<Object>();

    addColumnAndValue(sb, "DocumentID", docIdYouHaveSomewhere, params);
    int i = 0;
    for (String name: names)
       addColumnAndValue(sb, ",name" + i, name, params);
    i = 0;
    for (String location: locations)
       addColumnAndValue(sb, ",location" + i, location, params);
    // now close the thing
    sb.append(") values (?");
    for (i = 1; i<params.size(); i++)
       sb.append(",?");
    sb.append("=");

    // and now sb.toString() will contain valid SQL and the param values for a PreparedStatement will be in params array-list:

    PreparedStatement ps = conn.prepareStatement(sb.toString());
    for (i=0; i<params.size(); i++)
       ps.setObject(i+1, params.get(i));

    ps.executeUpdate(); // voi là!
    ...

}

private void add addColumnAndValue(StringBuilder sb, String columnName, Object value, List<Object> params) {
   sb.append(columnName);
   params.add(value);
}
于 2012-10-04T11:36:49.197 に答える
0

最初に 3 つの「HashSet」で作業を行う必要があると思います。

あなたが言ったので、3 セットのデータは最終的にデータベースの単一の行に移動します。そのため、挿入ステートメントのフィールドと同じ順序で、3 つのハッシュセットをマップ、または少なくともリストに変換することをお勧めします。後でこれらの値を名前またはインデックスでパラメーターとして PS に設定できるようにします。

そして、私は"Insert into table values (....) where id=123"それがうまくいくと確信していますか?

于 2012-10-04T11:38:09.167 に答える