【问题标题】:PreparedStatement don't insert Data into MySQL DBPreparedStatement 不会将数据插入 MySQL 数据库
【发布时间】:2019-04-25 06:47:04
【问题描述】:

我有以下数据库:

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() => 因为我有 autocommit true 没有变化。 (还是我用错了?) - 我的密钥没有自动增量,所以没有问题。

你有什么想法吗?

【问题讨论】:

    标签: java mysql prepared-statement


    【解决方案1】:

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

    【讨论】:

    • 它对我不起作用......我试过了,是的,最后我让它滑动了。我现在做的不一样。我将它们加载到文件中并从那里读取。不过谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-14
    • 2012-04-25
    • 2023-04-10
    • 2013-05-29
    • 1970-01-01
    相关资源
    最近更新 更多