加入收藏 | 设为首页 | 会员中心 | 我要投稿 银川站长网 (https://www.0951zz.com/)- 云通信、基础存储、云上网络、机器学习、视觉智能!
当前位置: 首页 > 站长学院 > MsSql教程 > 正文

jdbc批量插入数据怎么做 有啥高效方法

发布时间:2023-05-16 11:02:13 所属栏目:MsSql教程 来源:
导读:今天就跟大家聊聊有关“jdbc批量插入数据怎么做,有什么高效方法”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“jdbc批量插入数据怎么做,有

今天就跟大家聊聊有关“jdbc批量插入数据怎么做,有什么高效方法”的内容,可能很多人都不太了解,为了让大家认识和更进一步的了解,小编给大家总结了以下内容,希望这篇“jdbc批量插入数据怎么做,有什么高效方法”文章能对大家有帮助。

批量插入

1. 批量执行SQL语句

当需要成批插入或者更新记录时,可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率

JDBC的批量处理语句包括下面三个方法:

addBatch(String):添加需要批量处理的SQL语句或是参数;

executeBatch():执行批量处理语句;

clearBatch():清空缓存的数据

通常我们会遇到两种批量执行SQL语句的情况:

多条SQL语句的批量处理;

一个SQL语句的批量传参;

2. 高效的批量插入

举例:向数据表中插入20000条数据

数据库中提供一个goods表。创建如下:

CREATE TABLE goods(

id INT PRIMARY KEY AUTO_INCREMENT,

NAME VARCHAR(20)

);

实现层次一:使用Statement

Connection conn = JDBCUtils.getConnection();

Statement st = conn.createStatement();

for(int i = 1;i <= 20000;i++){

String sql = "insert into goods(name) values('name_' + "+ i +")";

st.executeUpdate(sql);

}

实现层次二:使用PreparedStatement

long start = System.currentTimeMillis();

Connection conn = JDBCUtils.getConnection();

String sql = "insert into goods(name)values(?)";

PreparedStatement ps = conn.prepareStatement(sql);

for(int i = 1;i <= 20000;i++){

ps.setString(1, "name_" + i);

ps.executeUpdate();

}

long end = System.currentTimeMillis();

System.out.println("花费的时间为:" + (end - start));//82340

JDBCUtils.closeResource(conn, ps);

实现层次三

/*

* 修改1: 使用 addBatch() / executeBatch() / clearBatch()

* 修改2:mysql服务器默认是关闭批处理的,我们需要通过一个参数,让mysql开启批处理的支持。

* ?rewriteBatchedStatements=true 写在配置文件的url后面

* 修改3:使用更新的mysql 驱动:mysql-connector-java-5.1.37-bin.jar

*

*/

@Test

public void testInsert1() throws Exception{

long start = System.currentTimeMillis();

Connection conn = JDBCUtils.getConnection();

String sql = "insert into goods(name)values(?)";

PreparedStatement ps = conn.prepareStatement(sql);

for(int i = 1;i <= 1000000;i++){

ps.setString(1, "name_" + i);

//1.“攒”sql

ps.addBatch();

if(i % 500 == 0){

//2.执行

ps.executeBatch();

//3.清空

ps.clearBatch();

}

}

long end = System.currentTimeMillis();

System.out.println("花费的时间为:" + (end - start));//20000条:625 //1000000条:14733

JDBCUtils.closeResource(conn, ps);

}

实现层次四

/*

* 层次四:在层次三的基础上操作

* 使用Connection 的 setAutoCommit(false) / commit()

*/

@Test

public void testInsert2() throws Exception{

long start = System.currentTimeMillis();

Connection conn = JDBCUtils.getConnection();

//1.设置为不自动提交数据

conn.setAutoCommit(false);

String sql = "insert into goods(name)values(?)";

PreparedStatement ps = conn.prepareStatement(sql);

for(int i = 1;i <= 1000000;i++){

ps.setString(1, "name_" + i);

//1.“攒”sql

ps.addBatch();

if(i % 500 == 0){

//2.执行

ps.executeBatch();

//3.清空

ps.clearBatch();

}

}

//2.提交数据

conn.commit();

long end = System.currentTimeMillis();

System.out.println("花费的时间为:" + (end - start));//1000000条:4978

JDBCUtils.closeResource(conn, ps);

}

现在大家对于jdbc批量插入数据怎么做,有什么高效方法的内容应该都有一定的认识了吧,希望这篇能对大家有所帮助。

(编辑:银川站长网)

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

    推荐文章