集合和StringBuilder的奇怪行为

时间:2016-02-05 15:27:34

标签: java collections stringbuilder

我尝试使用CollectionStringBuilder中包含的对象进行SQL查询。这似乎是一个非常简单的代码:

public String makeQuery(Collection<MyObject> collection) {

    logger.info("The size of the collection is {}", collection.size());

    StringBuilder queryString = new StringBuilder("INSERT INTO my_table (my_column) VALUES ");
    int i = 1;
    for (MyObject object : collection) {

        queryString.append("('");
        queryString.append(object.get...);
        queryString.append("')");

        if (i == collection.size()) {
            queryString.append(";");
        } else {
            queryString.append(",");
        }
        i++;

    }

    logger.info("The size of the collection is {}", collection.size());

    return queryString.toString();

}

对我来说,这段代码应该有效,但有时我会得到这样的结果:

 INSERT INTO my_table (my_column) VALUES ('a'),('b');('c'),

半结肠不是最后一个字符怎么可能?

修改

我在循环之前和之后添加了日志,并且集合的大小始终相同。

1 个答案:

答案 0 :(得分:1)

您可以尝试使用Iterator()并直到hasNext()只做正常的追加。当hasNext()返回false时,只需附加&#39;;&#39;。如果不是,那就不需要额外的了。