? ? ? ? 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";// db2String 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();}}}}