如何将50K记录插入Oracle数据库?

时间:2015-05-06 06:40:44

标签: java hibernate jpa jdbc

我要求只将一些数据插入Oracle数据库,只能插入一个表而不是任何关系。

我需要在同一个交易中插入超过50K个记录。做这个的最好方式是什么?使用纯JDBCJPAHibernate等...

哪种方式(批量更新或原始更新原始)最好在同一事务中插入大约50000条记录?

2 个答案:

答案 0 :(得分:4)

休眠:使用批量更新,您可以插入数据,

  1. 首先保存会话中的所有对象

    session.save(Object);

  2. flush()clear()您的会话

  3. if ((batchCounter % 25000) == 0) {
      session.flush();
      session.clear();
    }
    
    1. 提交所有数据

      tx.commit();

答案 1 :(得分:1)

您可以使用Java Jdbc预处理语句。

// Create SQL statement
String SQL = "INSERT INTO Employee (id, first, last, age) " +
             "VALUES(?, ?, ?, ?)";

// Create PreparedStatement object
PreparedStatemen pstmt = conn.prepareStatement(SQL);

// Set auto-commit to false
conn.setAutoCommit(false);

// Set the variables
pstmt.setInt( 1, 400 );
pstmt.setString( 2, "x" );
pstmt.setString( 3, "y" );
pstmt.setInt( 4, 33 );

// Add it to the batch
pstmt.addBatch();

// Set the variables
pstmt.setInt( 1, 401 );
pstmt.setString( 2, "p" );
pstmt.setString( 3, "q" );
pstmt.setInt( 4, 31 );

// Add it to the batch
pstmt.addBatch();

// Create an int[] to hold returned values
int[] count = stmt.executeBatch();

// Explicitly commit statements to apply changes
conn.commit();