JDBC Insertion OutOfMemoryError

J'ai écrit une méthode insert() dans lequel je suis en train d'utiliser JDBC Lot pour l'insertion d'un demi-million d'enregistrements dans une base de données MySQL:

public void insert(int nameListId, String[] names) {
        String sql = "INSERT INTO name_list_subscribers (name_list_id, name, date_added)"+
                     " VALUES (?, ?, NOW())";
        Connection conn = null;
        PreparedStatement ps = null;

        try{
            conn = getConnection();
            ps = conn.prepareStatement(sql);

            for(String s : names ){
                ps.setInt(1, nameListId); 
                ps.setString(2, s);
                ps.addBatch();
            }

            ps.executeBatch();

        }catch(SQLException e){
            throw new RuntimeException(e);
        }finally{
            closeDbResources(ps, null, conn);
        }
    }

Mais à chaque fois que j'essaie d'exécuter cette méthode, j'obtiens l'erreur suivante:

java.lang.OutOfMemoryError: Java heap space
    com.mysql.jdbc.ServerPreparedStatement$BatchedBindValues.<init>(ServerPreparedStatement.java:72)
    com.mysql.jdbc.ServerPreparedStatement.addBatch(ServerPreparedStatement.java:330)
    org.apache.commons.dbcp.DelegatingPreparedStatement.addBatch(DelegatingPreparedStatement.java:171)

Si je remplace ps.addBatch() avec ps.executeUpdate() et supprimer ps.executeBatch(), il fonctionne très bien, mais il faut un certain temps. S'il vous plaît laissez-moi savoir si vous savez si à l'aide de Lot est approprié dans cette situation, et si elle l'est, pourquoi donne-t-il OurOfMemoryError?

Grâce

OriginalL'auteur craftsman | 2010-02-09