我正在使用 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/