繁体   English   中英

使用JDBC的简单Java插入

[英]Simple Java Insert using JDBC

我的数据库表架构类似于

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

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

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

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

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

我无法理解的是,如果我有硬编码的字符串,而不是简单地可以使用类似以下内容的字符串:

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

但是,我需要遍历每个哈希集并将所有3个哈希集的数据插入到同一行中。 我对如何写这样的陈述感到困惑。 请记住,我的表最初是完全空的,所以我不能使用where子句(诸如“插入..... where documentID =“ 23423”之类的东西)

假设您通过以下方式创建了这些集合:

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);
}

我想您需要首先对3个“ HashSet”进行一些工作。

正如您所说的,“ 3组数据”最终将进入数据库的单行。 因此,我建议您将3个哈希集转换为Map或至少一个List,其顺序与insert语句中的字段相同。 这样以后您就可以通过名称或索引将这些值设置为PS的参数。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM