java - MySQL 批量插入表现得很奇怪

标签 java mysql

我正在使用 MySQL 将大约 10000 个条目上传到数据库中。这是我的代码:

public void addChests(HashMap<Location, ChestGeneratorType> map) {

    java.sql.PreparedStatement statement;
    try {
        statement = plugin.sql.openConnection().prepareStatement("INSERT INTO chests (Location, Generator, ToAdd) VALUES (?,?,?)");

        for (Location l : map.keySet()) {
            map.get(l).chests.add(new Chests(l, map.get(l), 0));

            statement.setString(1, Utils.locationToString(l));
            statement.setString(2, map.get(l).configName);
            statement.setInt(3, 0);

            statement.addBatch();
        }

        statement.executeBatch();
    } catch (SQLException sqlE) {
        sqlE.printStackTrace();
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

}

这段代码应该遍历我的 map 并为 map 中的每个值插入一个新行。该 map 有大约 10000 个条目,我通过将 map 转储到文本文件(每行一个)进行测试,得到了 9800 多个条目。所以我知道我的 HashMap 已满。但实际情况是它只放入了 1513 个条目,而不是 9800 多个。奇怪的是在所有这些条目中,“generator”值是“irongenerator”。仅当 ChestGeneratorType.configName 是irongenerator 时才插入它?为什么?

MySQL数据库:https://gyazo.com/5a0686a48a6238d2d958f7a7411696b2

更好的解释(我正在使用 bukkit 插件):https://www.spigotmc.org/threads/mysql-mass-insert-acting-weird.99373/

谢谢

最佳答案

我发现了这个问题..

我还有另一个任务,该任务将截断表,然后再次插入值。在我插入所有irongenerators之后,它会立即截断表,这解释了为什么列生成器都是相同的..

谢谢大家。

关于java - MySQL 批量插入表现得很奇怪,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33335993/

相关文章:

java - Spring Boot配置优先级

java - 如何对两个字符串数组列表应用二分搜索集合

php - 准备使用选择查询失败的准备语句

php - 插入行后如何从 MySQL 表返回值?

mysql - ory/ladon 管理器与 golang - 未创建表

php - 如何在从 MySQL 数据库填充的 PHP 中创建动态下拉列表

java初学者,运算符优先级表

java - 使用 Antlr 获取标识符和函数名

java - 用java下载文件,如何优化带宽

php - 合并来自两个不同 MySql 查询的两个不同数组