92 votes

Java : Insérer plusieurs lignes dans MySQL avec PreparedStatement

Je veux insérer plusieurs lignes à la fois dans une table MySQL en utilisant Java. Le nombre de lignes est dynamique. Dans le passé, je faisais...

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

    myStatement.executeUpdate();
}

J'aimerais l'optimiser pour utiliser la syntaxe supportée par MySQL :

INSERT INTO table (col1, col2) VALUES ('val1', 'val2'), ('val1', 'val2')[, ...]

mais avec un PreparedStatement Je ne connais pas de moyen de le faire puisque je ne sais pas à l'avance combien d'éléments array contiendra. Si ce n'est pas possible avec un PreparedStatement Comment puis-je le faire autrement (tout en échappant aux valeurs du tableau) ?

0voto

rapTOR Points 1

Cela pourrait être utile dans votre cas de passer un tableau à PreparedStatement .

Stockez les valeurs requises dans un tableau et passez-le à une fonction pour les insérer.

String sql= "INSERT INTO table (col1,col2)  VALUES (?,?)";
String array[][] = new String [10][2];
for(int i=0;i<array.size();i++){
     //Assigning the values in individual rows.
     array[i][0] = "sampleData1";   
     array[i][1] = "sampleData2";
}
try{
     DBConnectionPrepared dbcp = new DBConnectionPrepared();            
     if(dbcp.putBatchData(sqlSaveAlias,array)==1){
        System.out.println("Success"); 
     }else{
        System.out.println("Failed");
     }
}catch(Exception e){
     e.printStackTrace();
}

putBatchData(sql,2D_Array)

public int[] putBatchData(String sql,String args[][]){
        int status[];
        try {
            PreparedStatement stmt=con.prepareStatement(sql);
            for(int i=0;i<args.length;i++){
                for(int j=0;j<args[i].length;j++){
                    stmt.setString(j+1, args[i][j]);
                }            
                stmt.addBatch();
                stmt.executeBatch();
                stmt.clearParameters();
            }
            status= stmt.executeBatch();             
        } catch (Exception e) {
            e.printStackTrace();
        } 
        return status;
    }

0voto

kapil das Points 470

Il est possible de soumettre plusieurs mises à jour dans JDBC .

Nous pouvons utiliser Statement , PreparedStatement y CallableStatement pour la mise à jour par lots avec auto-commit désactivé.

addBatch() y executeBatch() sont disponibles avec tous les objets de déclaration pour avoir BatchUpdate.

Ici addBatch() ajoute un ensemble de déclarations ou de paramètres au lot en cours.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X