JDBC批量插入数据

一.直接上源代码(以导入课表数据为例):

// 批量插入新申请(导入默认课表)
	public boolean batchInsertNewApply(List<LabIfo> labIfos)
			throws SQLException {
		Connection conn = JdbcUtils.GetConnection();
		PreparedStatement ps = null;
		String sql = "insert into lab_ifo(labId,userId,week,day,lesson,applyReason) values(?,?,?,?,?,?)";

		try {
			//一般JDBC连接数据库之后,默认设置为“自动提交”,即每次SQL操作都commit.  如果需要手动提交,则必须将自动提交功能设置为false.
			conn.setAutoCommit(false);   //取消自动提交事务
			ps = conn.prepareStatement(sql);

			for (int i = 0; i < labIfos.size(); ++i) {
				LabIfo labIfo = labIfos.get(i);

				UserService userService = new UserService();
				int userId = userService.userNameToGetUserId(labIfo
						.getUserName());

				LabService labService = new LabService();
				int labId = labService.labNameToGetLabId(labIfo.getLabName());

				ps.setInt(1, labId);
				ps.setInt(2, userId);
				ps.setInt(3, labIfo.getWeek());
				ps.setInt(4, labIfo.getDay());
				ps.setInt(5, labIfo.getLesson());
				ps.setString(6, labIfo.getApplyReason());

				ps.addBatch();

				// 每1000条数据执行一次插入
				if (i % 1000 == 0) {
					ps.executeBatch();
					conn.commit();   //手动提交事务
				}
			}

		} catch (SQLException e) {
			e.printStackTrace();
		}

		int[] number = ps.executeBatch(); // 把剩余的数据插入
		conn.commit();   //手动提交事务	
		
		try {
			conn.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		if (number[0] == 0)
			return false;
		else
			return true;
	}

二.注意:

1.在JDBC中,事务操作默认是自动提交。也就是说,一条对数据库的更新表达式代表一项事务操作。操作成功后,系统将自动调用commit()来提交。我们可以通过调用setAutoCommit(false)来禁止自动提交。之后就可以把多个数据库操作的表达式作为一个事务,在操作完成后调用commit()来进行整体提交,减少事务操作,提高效率。

这里我们关闭自动提交:

conn.setAutoCommit(false);

当添加了1000条数据库插入操作之后,手动提交,一次执行:

conn.commit();

2.先添加操作:

ps.addBatch();

然后批量执行操作:

ps.executeBatch();
从而实现批量插入



参考链接:

http://www.cnblogs.com/wpcnblog/archive/2011/06/23/2087768.html

http://www.cnblogs.com/kahreman/archive/2012/08/06/2625827.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值