【问题标题】:How Insert 50K records to Oracle database? [closed]如何将 50K 记录插入 Oracle 数据库? [关闭]
【发布时间】:2015-07-16 03:39:10
【问题描述】:

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

我需要在同一个事务中插入多个50K 记录。做这个的最好方式是什么?使用纯JDBCJPAHibernate等……

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

【问题讨论】:

  • 你可以进行一些批处理。
  • 50k 记录很小,任何事情都可以做到。你到底有什么问题?
  • 哪个 API 更好?纯 JDBC 或 JPA...
  • 既然你只想INSERT 数据(不需要面向对象),我想你最好使用JDBC。但从技术上讲,任何事情都可以。

标签: java hibernate jpa jdbc


【解决方案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();

【讨论】:

  • 哪个 API 最好?纯 JDBC 或 JPA 等...
  • 视需求而定。如果您的项目具有休眠功能,请继续使用它。
【解决方案2】:

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

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

    session.save(Object);

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

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

    tx.commit();

【讨论】:

  • 哪个 API 最好?纯 JDBC 或 JPA 等...
  • JPA 是一个很好的 api,假设你的数据库在功能上发生了变化...... JPA 会帮助你......它也有各种优势......
猜你喜欢
  • 1970-01-01
  • 2018-03-19
  • 1970-01-01
  • 1970-01-01
  • 2013-10-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-15
  • 2019-04-19
相关资源
最近更新 更多