Maison > base de données > tutoriel mysql > Comment puis-je insérer efficacement plusieurs lignes dans MySQL à l'aide de PreparedStatement de Java ?

Comment puis-je insérer efficacement plusieurs lignes dans MySQL à l'aide de PreparedStatement de Java ?

Linda Hamilton
Libérer: 2024-12-20 15:31:09
original
535 Les gens l'ont consulté

How Can I Efficiently Insert Multiple Rows into MySQL Using Java's PreparedStatement?

Insérer plusieurs lignes dans MySQL avec PreparedStatement à l'aide de PreparedStatement

En Java, l'insertion efficace de plusieurs lignes dans une table MySQL peut être réalisée à l'aide du lot de PreparedStatement capacités de traitement. Auparavant, l'exécution d'instructions SQL individuelles pour chaque ligne était une pratique courante :

for (String element : array) {
    myStatement.setString(1, element[0]);
    myStatement.setString(2, element[1]);

    myStatement.executeUpdate();
}
Copier après la connexion

Cependant, pour optimiser les performances, MySQL propose une syntaxe qui permet d'insérer plusieurs lignes en une seule fois :

INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...]
Copier après la connexion

L'utilisation de cette approche avec PreparedStatement nécessite un traitement par lots :

  1. Créer un PreparedStatement : Préparez l'instruction SQL et définissez ses paramètres pour chaque ligne. Utilisez addBatch() pour ajouter chaque instruction au lot.
  2. Exécutez le lot : Une fois toutes les lignes ajoutées, appelez executeBatch() pour exécuter l'intégralité du lot. Cette méthode renvoie un tableau de nombres de mises à jour, indiquant le nombre de lignes affectées par chaque instruction.

Voici un exemple illustrant le processus :

public void save(List<Entity> entities) throws SQLException {
    try (
        Connection connection = database.getConnection();
        PreparedStatement statement = connection.prepareStatement(SQL_INSERT);
    ) {
        int i = 0;

        for (Entity entity : entities) {
            statement.setString(1, entity.getSomeProperty());
            // ...

            statement.addBatch();
            i++;

            if (i % 1000 == 0 || i == entities.size()) {
                statement.executeBatch(); // Execute every 1000 items.
            }
        }
    }
}
Copier après la connexion

Exécuter le lot toutes les 1 000 lignes permet d'éviter les limitations potentielles imposées par les pilotes JDBC ou les bases de données sur la taille des lots.

Reportez-vous au didacticiel JDBC pour plus de détails. sur l'utilisation des objets PreparedStatement et Statement pour les mises à jour par lots.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal