使用JDBC的简单Java插入

时间:2012-10-04 11:26:57

标签: java sql jdbc

我的数据库表模式类似于

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

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

在每次循环迭代中,这些hashset都会填充上面的值。

在每次迭代结束时,将删除这些散列集中的数据并创建新的数据。

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

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

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

但是我需要迭代每个hashset并在一行中插入(如上所述)所有3个hashset的数据。我很困惑如何写这样的声明。记住我的表最初是完全空的,所以我不能使用where子句(类似于“插入..... where documentID =”23423“)

2 个答案:

答案 0 :(得分: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);
}

答案 1 :(得分:0)

我想你需要先在你的3&#34; HashSet&#34; s上做一些工作。

因为你说3套中的数据最终会转到数据库中的单行。所以我建议将你的3个hashset转换为Map,或者至少是一个List,其顺序与insert语句中的字段相同。以便稍后您可以按名称或索引将这些值设置为PS的参数。

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