我要求只将一些数据插入Oracle数据库,只能插入一个表而不是任何关系。
我需要在同一个交易中插入超过50K
个记录。做这个的最好方式是什么?使用纯JDBC
,JPA
或Hibernate
等...
哪种方式(批量更新或原始更新原始)最好在同一事务中插入大约50000条记录?
答案 0 :(得分:4)
休眠:使用批量更新,您可以插入数据,
首先保存会话中的所有对象
session.save(Object);
flush()
和clear()
您的会话
if ((batchCounter % 25000) == 0) { session.flush(); session.clear(); }
提交所有数据
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();