2015-05-06 40 views
6

我有要求只將一些數據插入Oracle數據庫到只有一個表,而不是任何關係。如何將50K記錄插入Oracle數據庫?

我需要在同一個事務中插入多於50K的記錄。做這個的最好方式是什麼?使用純粹的JDBCJPAHibernate等...

哪種方式(批更新或原始更新原始)更好地插入大約50000記錄在同一事務?

+0

你可以去一些批處理。 –

+2

50k記錄很小,任何事情都可以做到。你到底有什麼問題? – Mat

+0

哪個API更好?純JDBC或JPA ... – user3496599

回答

4

休眠:使用批量更新,您可以將您的數據,

  1. 首先保存所有對象在會話

    session.save(Object);

  2. flush()clear()會話

if ((batchCounter % 25000) == 0) { 
    session.flush(); 
    session.clear(); 
} 
  • 提交的所有數據

    tx.commit();

  • +0

    哪個API最好?純JDBC或JPA等... – user3496599

    +0

    JPA是一個很好的API,假設你的數據庫得到改變.... JPA將幫助你...它也有各種優點... –

    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(); 
    
    +0

    哪個API最好?純JDBC或JPA等...... – user3496599

    +0

    根據需要決定。如果你的項目已經休眠,那就去吧。 – Thilak