PreparedStatement不要将数据插入MySQL DB

时间:2018-11-22 14:47:19

标签: java mysql prepared-statement

我有以下数据库:

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();

}

但是它不会将任何内容写入数据库。 我对于另一个表几乎具有相同的代码,并且在那里工作没有问题。唯一的区别是我要做的插入量(在工作情况下:超过一百万,在非工作情况下:大约70)

我找不到解决方案,而且没有主意。

我尝试了什么: -connect.commit()=>因为我已经自动提交true,所以没有变化。 (或者我使用错了吗?) -我的按键没有自动递增功能,所以那里没问题。

您有什么主意吗?

1 个答案:

答案 0 :(得分:0)

您最终必须通过以下方式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();