下面一个小案例:
public class JDBCDemo3 {
public static void main(String[] args) {
/**
* 向zc_userinfo表中插入100条数据。
* 由于每条记录的内容不完全一致,所以不要使用Statement执行
* 否则数据库会生成100个执行计划,大大降低了数据库的效率。
*/
try {
//1创建连接
Connection conn=DBUtil.getConnection();
//2创建SQL因为是使用PreparedStatement,所以要先创建SQL语句。
String sql="INSERT INTO zc_userinfo" +
"(id,username,password,email,account)" +
"VALUES" +
"(seq_zc_userinfo_id.NEXTVAL,?,'123456',?,50000)";
//3创建PreparedStatement 对象
PreparedStatement ps=conn.prepareStatement(sql);
//4循环添加100条数据(缓存来减少向服务端发送数据的次数,从而提高效率)
for(int i=0;i<=100;i++){
ps.setString(1,"test"+i);
ps.setString(2,"test"+i+"@qq.com");
/**
* 每当我们执行一次executeUpdate()的方法时,都会将?对应的值发送至
* 服务端执行,这样会提高网络的访问次数,从而降低了访问效率。批量处理时
* 效果明显,不建议这样操作
*/
/**
* 将上面一组?替换的值加入到批量处理的缓存中,等待一起发送
* 在实际开发中,根据?的个数,批操作的数量不同,也要进行控制
* 适当的时候就要执行一次,否则可能导致缓存过多内存溢出。
*/
ps.addBatch();
}
/**
* ps.executeBatch()方法返回的是一个int类型的数组
* 数组中每一个下标表示插入的一条数的内容
*/
int [] n=ps.executeBatch();
System.out.println("插入成功!");
ps.close();
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtil.closeConnetion();
}
}
}