关于jdbc的批处理(使用statement对象和preparedStatement对象)

使用statement对象进行批处理

1.获取connection对象

Connection  conn = JdbcUtils.getConnection();

2.获取statement对象

Statement st = conn.createStatement();

3.使用for循环一次插入多个sql语句

//插入2000条
			    for(int i = 1;i<=2000;i++) {
			    	String sql = "insert into student(id,name,age) values('"+i+"','张三',20)";
			    	//将sql语句添加到缓存中
			    	st.addBatch(sql);
			    	if(i%500 ==0) {
			    		//每500条发送一次数据
			    		st.executeBatch();
			    		//发送过后清空缓存中的数据
			    		st.clearBatch();
			    	}
			    }

4.提交数据

conn.commit();

使用statement对象的优缺点:
优点:可以向数据库一次性发送多条不同sql(或者是相同的sql语句,只是参数不同),大大的提升了效率
缺点:当一次发送不同的sql语句时,需要多次编写sql,对程序员来说是一种负担

使用Preparedstatement对象进行批处理

1.获取statement对象

 connection conn = JdbcUtils.getConnection();

2.编写sql语句

 String str = "insert into stu(id,name,age) values(?,?,?)";

3.对sql语句进行预编译

 PreparedStatemnt ps = conn.preparedStatement(sql);

4.使用for循环一次性插入多个占位符(数据)

   //插入2000条
    			    for(int i = 1;i<=2000;i++) {
    			    	ps.setInt(1,i);
    			    	     ps.setString(2,"张三");
    			    	     ps.setString(3,20);
    			    	//将sql语句添加到缓存中
    			    	ps.addBatch();
    			    	if(i%500 ==0) {
    			    		//每500条发送一次数据
    			    		ps.executeBatch();
    			    		//发送过后清空缓存中的数据
    			    		ps.clearBatch();
    			    	}
    			    }

5.提交数据

conn.commit();	

使用preparedstatement对象的优缺点:
优点:使用预编译,效率比statement效率更高
缺点:只能应用在sql语句相同,但参数不同的批处理中。因此此种形式的批处理经常用于在同一个表中批量插入数据,或批量更新表的数据。

两种操作的对比:
1.statement可以一次性插入不同的sql,也能应用在sql语句相同,参数不同的批处理当中,而perparedstatement只能应用在sql语句相同,但是参数不同的批处理当中。
2.在都应用在sql语句相同,而参数不用的情况下,预编译的处理比statement效率更高

你可能感兴趣的:(关于jdbc的批处理(使用statement对象和preparedStatement对象))