java - PreparedStatement 不会将数据插入 MySQL 数据库
问题描述
我有以下数据库:
CREATE TABLE b (
name VARCHAR(255) NOT NULL,
text MEDIUMTEXT NOT NULL,
PRIMARY KEY (NAME)
);
我有以下代码:
public void saveBlocks(Map<String, Block> blocks) throws SQLException{
String userInsertQuery = "Insert INTO b (name, text) VALUES (?, ?)";
preparedStatement = connect.prepareStatement(userInsertQuery);
int batchCounter = 0;
for(Block block : blocks.values()){
preparedStatement.setString(1,block.getId());
preparedStatement.setString(2,block.getText());
preparedStatement.addBatch();
batchCounter++;
if(batchCounter%200 == 0) {
preparedStatement.executeBatch();
}
}
preparedStatement.executeBatch();
}
但它不会将任何内容写入数据库。我对另一个表有几乎相同的代码,它可以正常工作。唯一的区别是我做的插入数量(在工作情况下:超过 100 万,在非工作情况下:大约 70)
我找不到解决方案,而且我没有想法。
我尝试了什么: - connect.commit() => 因为我已经自动提交 true 没有变化。(还是我用错了?) - 我的钥匙上没有自动增量,所以那里没有问题。
你有什么想法吗?
解决方案
您最终必须commit
通过以下方式进行交易:
connect.commit();
和connect.setAutoCommit(false);
String userInsertQuery = "Insert INTO b (name, text) VALUES (?, ?)";
preparedStatement = connect.prepareStatement(userInsertQuery);
connect.setAutoCommit(false);
int batchCounter = 0;
for(Block block : blocks.values()){
preparedStatement.setString(1,block.getId());
preparedStatement.setString(2,block.getText());
preparedStatement.addBatch();
batchCounter++;
}
int[] results = preparedStatement.executeBatch();
connect.commit();
推荐阅读
- python - 从我的链接获取令牌到我的令牌身份验证功能的问题,我错过了什么?
- apache-kafka - Apache-Kafka:使用 windows cmd 创建主题时出现问题
- python - 尝试使用 Solve_ivp 求解牛顿多面体,并且正确性因 n 的不同值而异?
- javascript - 如何在 vuejs 中生成每个版本的新版本?
- python - 二叉搜索树的最低共同祖先
- hadoop - 在 HDFS 中看不到数据,使用 sqoop 从 mariadb 导入表到 Hadoop
- visual-studio - 如何将英特尔 Parallel Studio XE 中的 Fortran 编译器与 Visual Studio 结合使用
- bazel - 谁能详细说明如何在 C++ 规则中实现像 local_defines 这样的属性?
- java - 无法在 intellij 中创建类
- python - 迭代数据库数组烧瓶