jdbc批量插入或更新数据

        mybatis可以批量插入或更新数据,不过mybatis底层也是基于jdbc来实现的,如何使用jdbc批量操作数据?本文给出demo。

        

    /**
	 * JDBC分批次批量插入
	 * 
	 * @throws IOException
	 */
	public static void testJDBCBatchInsertUser() throws IOException {

		Connection connection = null;
		PreparedStatement preparedStatement = null;
		try {
			// lib添加了驱动db2jcc4.jar这一步可以注释
			// Class.forName("com.ibm.db2.jcc.DB2Driver");
			// mysql
			// String databaseURL = "jdbc:mysql://localhost:3306/test";
			// db2
			String databaseURL = "jdbc:db2://131.252.100.200:60001/testdb";
			String user = "root";
			String password = "123456";

			connection = DriverManager.getConnection(databaseURL, user, password);
			/**
			 *  关闭自动提交事务,改为手动提交,如果需要事务支持
			 *  connection commit相关的注释请打开
			 */
			// connection.setAutoCommit(false);

			System.out.println("===== 开始插入数据 =====");
			long startTime = System.currentTimeMillis();
			String sqlInsert = "INSERT INTO T_TEST_USER (NAME,AGE) VALUES (?,?)";
			preparedStatement = connection.prepareStatement(sqlInsert);

			Random random = new Random();
			for (int i = 1; i <= 30000; i++) {

				preparedStatement.setString(1, "user" + i);
				if (i == 8000) {
					preparedStatement.setString(1, "user01234567890123456789012345678901234567890 " + i);
				}
				preparedStatement.setInt(2, random.nextInt(100));
				// 添加到批处理中
				preparedStatement.addBatch();
				/**
				 * 1000条每次,30万条记录,耗时14252毫秒 5000条每次,30万条记录,耗时7773毫秒 10000条每次,30万条记录,耗时6482毫秒
				 * 50000条每次,30万条记录,耗时6159毫秒 50000条每次,30万条记录,耗时5822毫秒 根据机器性能来选择最优,实验下来5000笔每批最优
				 */
				try {
					if (i % 5000 == 0) {
						// 每1000条数据提交一次
						preparedStatement.executeBatch();
						// connection.commit();
						System.out.println("成功插入第 " + i + " 条数据");
					}
				} catch (Exception e) {
//			    	try {
//					if(connection!=null)
//					{
//		    		   connection.rollback();
//					}
//				} catch (Exception e1) {
//					// TODO Auto-generated catch block
//					e1.printStackTrace();
//				}
					e.printStackTrace();
				}

			}
			// 处理剩余的数据
			preparedStatement.executeBatch();
			// connection.commit();
			long spendTime = System.currentTimeMillis() - startTime;
			System.out.println("成功插入 30 万条数据,耗时:" + spendTime + "毫秒");
		} catch (Exception e) {
//	    	try {
//				if(connection!=null)
//				{
//	    		   connection.rollback();
//				}
//			} catch (Exception e1) {
//				// TODO Auto-generated catch block
//				e1.printStackTrace();
//			}
			System.out.println("Error: " + e.getMessage());
		} finally {
			if (preparedStatement != null) {
				try {
					preparedStatement.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
			if (connection != null) {
				try {
					connection.close();
				} catch (SQLException e) {
					e.printStackTrace();
				}
			}
		}
	}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值