0

我的数据库表架构类似于

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

现在我有 3 个具有上述值的 Hashset 可用(即,一个用于名称,一个用于位置,一个用于组织)

在循环的每次单次迭代中,这些哈希集都填充有上述值。

在每次迭代结束时,这些哈希集中的数据被删除并创建新的。

现在我的问题是在每次迭代中我必须从这些哈希集值中填充 sql 表行(每次迭代只有 1 行)。

我无法理解的是,如果我有硬编码字符串而不是简单地使用类似的东西:

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

但是,我需要遍历每个哈希集并将所有 3 个哈希集的数据插入(类似于上面)一行中。我对如何写这样的陈述感到困惑。请记住,我的表最初是完全空的,所以我不能使用 where 子句(类似于“插入...... 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 Sets 中的数据最终将进入数据库中的单行。所以我建议将你的 3 hashset 转换为一个 Map,或者至少是一个 List,其顺序与 insert 语句中的字段相同。以便稍后您可以按名称或索引将这些值设置为 PS 的参数。

而且我从未见过像"Insert into table values (....) where id=123"你确定它会起作用的插入语句吗?

于 2012-10-04T11:38:09.167 回答