加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

java – 为什么spring jdbcTemplate batchUpdate逐行插入

发布时间:2020-12-15 01:49:33 所属栏目:大数据 来源:网络整理
导读:我有200K行要插入一个数据库表中.我试图在spring中使用jdbcTemplate.batchUpdate,以便每批次插入10,000个.但是,此过程会消耗太多时间(对于200K行,为7分钟).所以在数据库方面,我检查table_X中select count(*)插入的行数.我发现行数略有增加,预计为10K.任何人

我有200K行要插入一个数据库表中.我试图在spring中使用jdbcTemplate.batchUpdate,以便每批次插入10,000个.但是,此过程会消耗太多时间(对于200K行,为7分钟).所以在数据库方面,我检查table_X中select count(*)插入的行数.我发现行数略有增加,预计为10K.任何人都可以解释是什么原因或者是应该在数据库端配置的东西吗?

PS:我正在使用sybase ….

最佳答案
网络上有很多方法可供使用.
性能直接取决于

>你写的代码
>您正在使用的JDBC驱动程序
>数据库服务器和您正在使用的连接数
>表索引导致插入缓慢

没有看你的代码,任何人都可以猜到,但没有人能找到确切的解决方案.

方法1

//insert batch example
public void insertBatch(final List

参考

https://www.mkyong.com/spring/spring-jdbctemplate-batchupdate-example/

http://docs.spring.io/spring-framework/docs/3.0.0.M4/reference/html/ch12s04.html

方法2.1

//insert batch example
public void insertBatch(final List

或者,您可以直接执行SQL.

//insert batch example with SQL
public void insertBatchSQL(final String sql){

    getJdbcTemplate().batchUpdate(new String[]{sql});

}

refernce

https://www.mkyong.com/spring/spring-simplejdbctemplate-batchupdate-example/

方法2.2

public class JdbcActorDao implements ActorDao {
    private SimpleJdbcTemplate simpleJdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
    }

    public int[] batchUpdate(final List

方法2.3

public class JdbcActorDao implements ActorDao {
    private SimpleJdbcTemplate simpleJdbcTemplate;

    public void setDataSource(DataSource dataSource) {
        this.simpleJdbcTemplate = new SimpleJdbcTemplate(dataSource);
    }

    public int[] batchUpdate(final List

方法3:JDBC

dbConnection.setAutoCommit(false);//commit trasaction manually

String insertTableSQL = "INSERT INTO DBUSER"
            + "(USER_ID,USERNAME,CREATED_BY,CREATED_DATE) VALUES"
            + "(?,?)";
PreparedStatement = dbConnection.prepareStatement(insertTableSQL);

preparedStatement.setInt(1,101);
preparedStatement.setString(2,"mkyong101");
preparedStatement.setString(3,"system");
preparedStatement.setTimestamp(4,getCurrentTimeStamp());
preparedStatement.addBatch();

preparedStatement.setInt(1,102);
preparedStatement.setString(2,"mkyong102");
preparedStatement.setString(3,getCurrentTimeStamp());
preparedStatement.addBatch();
preparedStatement.executeBatch();

dbConnection.commit();

refernce

https://www.mkyong.com/jdbc/jdbc-preparedstatement-example-batch-update/

/*Happy Coding*/

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读