首页 > 解决方案 > 将字符串的 ArrayList 插入 MySQL JDBC 中的表中

问题描述

我正在尝试在使用 PreparedStatement 循环到 MySQL 中的表时插入字符串集合。

类别表包含 ID (AUTOINCREMENT) 和 NAME。

我的方法

private ConnectionPool pool = ConnectionPool.getInstance();

@Override
public void addCategories(List<Category> category) throws SQLException {
    Connection connection = pool.getConnection();

    category = new ArrayList<>();

    try {
    PreparedStatement statement = connection
            .prepareStatement("insert into `couponsystem`.`categories` (NAME) VALUES (?)");
    for (Category categories : category) {

        statement.setString(1, category.toString());
        category.add(categories);

        statement.executeUpdate();
    }
    
    } finally {
        pool.restoreConnection(connection);
    }

}

类别类

public enum Category {

FOOD(1), ELECTRICITY(2), RESTAURANT(3), VACATION(4), HOTEL(5);

private Category(final int cat) {
    this.cat = cat;
}

private int cat;

public int getIDX() {
    return cat;
}

private Category(String cat1) {
    this.cat1 = cat1;
}

private String cat1;

public String getName() {
    return cat1;
}

}

主程序

List<Category> cats = new ArrayList<Category>(EnumSet.allOf(Category.class));
cat.addCategories(cats);

我没有得到任何异常,但是列表保持为空。我对 JDBC 有点陌生,似乎找不到解决它的问题。

谢谢。

标签: javajdbccollectionsenums

解决方案


对于您的类别的批量插入,您需要使用批次: https ://stackoverflow.com/a/4355097/6916890

如上面的答案所述:

public void save(List<Entity> entities) throws SQLException {
    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
    ) {
        int i = 0;

        for (Entity entity : entities) {
            statement.setString(1, entity.getSomeProperty());
            // ...

            statement.addBatch();
            i++;

            if (i % 1000 == 0 || i == entities.size()) {
                statement.executeBatch(); // Execute every 1000 items.
            }
        }
    }
}

您的案例可能仅适用于单一insert陈述。


推荐阅读