使用Batch批量添加数据

package com.atguigu.jdbc;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.Statement;

import org.junit.Test;

public class JDBCTest {
@Test
public void testBatch(){
Connection connection=null;
PreparedStatement preparedStatement=null;
try{
connection=JDBCTools.getConnection();
JDBCTools.beginTx(connection);
String sql="insert into customers values(?,?,?)";
preparedStatement=connection.prepareStatement(sql);
long beginTime=System.currentTimeMillis();
for(int i=0;i<100000;i++){

preparedStatement.setInt(1,i+100001);
preparedStatement.setString(2, "");
preparedStatement.setDate(3, new Date(new java.util.Date().getTime()));
//preparedStatement.executeUpdate();
//积攒SQL
preparedStatement.addBatch();
//当积攒到一定程度,就统一的执行一次,并且清空先前积攒的SQL
if((i+1)%300==0){
preparedStatement.executeBatch();
preparedStatement.clearBatch();
}
}
//若总条数不是批量数值的整数倍,则还需要再额外执行一次
if((100000%300)!=0){
preparedStatement.executeBatch();
preparedStatement.clearBatch();
}
long stopTime=System.currentTimeMillis();
JDBCTools.commit(connection);
System.out.println(beginTime-stopTime);
}catch(Exception e){
e.printStackTrace();
JDBCTools.rollback(connection);
}finally{
JDBCTools.release(null, preparedStatement, connection);
}
}

@Test
public void testBatchWithPreparedStatement(){
Connection connection=null;
PreparedStatement preparedStatement=null;
try{
connection=JDBCTools.getConnection();
JDBCTools.beginTx(connection);
String sql="insert into customers values(?,?,?)";
preparedStatement=connection.prepareStatement(sql);
long beginTime=System.currentTimeMillis();
for(int i=0;i<100000;i++){

preparedStatement.setInt(1,i+100001);
preparedStatement.setString(2, "");
preparedStatement.setDate(3, new Date(new java.util.Date().getTime()));
preparedStatement.executeUpdate();
}
long stopTime=System.currentTimeMillis();

JDBCTools.commit(connection);
System.out.println(beginTime-stopTime);
}catch(Exception e){
e.printStackTrace();
JDBCTools.rollback(connection);
}finally{
JDBCTools.release(null, preparedStatement, connection);
}
}

}

时间: 2024-10-26 21:33:21

使用Batch批量添加数据的相关文章

Yii2如何批量添加数据

批量添加这个操作,在实际开发中经常用得到,今天小编抽空给大家整理些有关yii2批量添加的问题,感兴趣的朋友一起看看吧. 在上篇文章给大家介绍了关于浅析Yii2 gridview实现批量删除教程,当然,着重点在于怎么去操作gridview了,今儿我们来好好谈谈yii2如何批量添加数据? 有同学嚷嚷了,这还不简单,我foreach一循环,每个循环里面直接把数据插入到数据库,简单粗暴完事!我擦嘞,哥,你要是跟我在一个公司,我觉得第二天见到你的概率可就不大了! 话不多说,说多了你在骂我,我们步入正题,先

EF批量添加数据性能慢的问题的解决方案

//EF批量添加数据性能慢的问题的解决方案 public ActionResult BatchAdd() { using (var db = new ToneRoad.CEA.DbContext.DbContext()) { //**********************第一种解决方案 直接使用sql********************** string sqls = ""; for (int i = 0; i < 100000; i++) { sqls += "

.Net中批量添加数据的几种实现方法比较

在.Net中经常会遇到批量添加数据,如将Excel中的数据导入数据库,直接在DataGridView控件中添加数据再保存到数据库等等. 方法一:一条一条循环添加 通常我们的第一反应是采用for或foreach循环一条一条的添加. for (int i = 0; i < dgv.Rows.Count; i++) { string sql = "insert into ....."; SqlHelper.ExcuteNonQuery(CommandType.Text, sql, nu

ADO.NET批量添加数据到SQL Server—BulkCopy使用指南

BulkCopy位于System.Data.SqlClient命名空间,允许你使用其他源的数据有效地批量加载 SQL Server 表. 属性: BatchSize :每个批处理中的行数. 在每个批处理结束时,批处理中的行将发送到服务器. BulkCopyTimeout:超时之前可用于完成操作的秒数. ColumnMappings:返回 SqlBulkCopyColumnMapping 项的集合. 列映射定义数据源中的列和目标中的列之间的关系. DestinationTableName:服务器上

SSM批量添加数据

如何应对面临批量数据时如何提交给后台 方式1: 使用JSON格式 后台功能接受实现使用@ResponseBody 前端当有多行数据的时候添加到一个数组再通过JSON格式到后台List接收 @RequestMapping(value = "/emp01",method = RequestMethod.POST, produces = "application/json") @ResponseBody public String empAdd02(@RequestBod

CI 框架批量添加数据(如果数据库有就更新数据)

model: public function insert_select($values) { $sql = 'INSERT INTO ' . $this->_table_name . '(article_id,user_id,share_link,short_link,read_price,created_at,updated_at) VALUES ' . $values . ' ON DUPLICATE KEY UPDATE article_id=values(article_id),use

存储过程并批量添加数据

1 ALTER proc [dbo].[Dki_GBC_DownloadHistory] 2 ( 3 @CMD varchar(20), 4 @ContactPersonID int=0, 5 @UserID int=0 ---用户 6 ) 7 as 8 if @CMD is null 9 begin 10 print N'param @CMD can not is null!' 11 return 0 12 end 13 begin tran 14 ----------------------

java操作elasticsearch实现批量添加数据(bulk)

java操作elasticsearch实现批量添加主要使用了bulk 代码如下: //bulk批量操作(批量添加) @Test public void test7() throws IOException { //1.指定es集群 cluster.name 是固定的key值,my-application是ES集群的名称 Settings settings = Settings.builder().put("cluster.name", "my-application"

批量添加数据

C#批量向数据库增加数据: ----------------------------- using (var dbPlatform = DbContext.PlatformWorkCreate())                 {                     var CId = dbPlatform.Query<LQ_WaWaShowCategory>().Where(t => t.CategoryNameEn == "dianzijiaocai").