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
463 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!

source:php.cn
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