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();
				}
			}
		}
	}

你可能感兴趣的:(java开发步步为营,java,数据库,mysql,jdbc批量插入或更新数据,db2)