Maison > base de données > tutoriel mysql > Pourquoi les instructions préparées sont-elles plus rapides que les instructions dans JDBC ? expliquer?

Pourquoi les instructions préparées sont-elles plus rapides que les instructions dans JDBC ? expliquer?

WBOY
Libérer: 2023-08-26 17:57:06
avant
809 Les gens l'ont consulté

为什么 JDBC 中的准备语句比语句更快?解释?

Lors de l'exécution d'une instruction à l'aide d'un objet Statement, en particulier lors de l'insertion d'une instruction, chaque fois que la requête est exécutée, l'instruction entière est compilée et exécutée encore et encore, la seule différence entre les instructions étant la valeur de l'instruction. déclaration.

Cependant, les instructions préparées sont des instructions précompilées, c'est-à-dire que la requête est compilée et stockée dans la base de données, en utilisant des espaces réservés (?) au lieu de valeurs, et les valeurs de ces espaces réservés sont fournies ultérieurement.

Alors, évitez encore et encore les instructions de compilation et d’exécution inutiles.

Exemple

Supposons que nous ayons une table nommée Dataset dans la base de données qui contient colonnes mobile_brand et unit_sale, si nous voulons insérer des enregistrements dans cette table à l'aide d'un objet de déclaration, le code sera le suivant Représentation :

stmt.executeUpdate("insert into Dataset values('Iphone', 3000)");
stmt.executeUpdate("insert into Dataset values('Samsung', 4000)");
stmt.executeUpdate("insert into Dataset values('Nokia', 5000)");
stmt.executeUpdate("insert into Dataset values('Vivo', 1500)");
stmt.executeUpdate("insert into Dataset values('Oppo', 9000)");
stmt.executeUpdate("insert into Dataset values('MI', 6400)");
stmt.executeUpdate("insert into Dataset values('MotoG', 4360)");
stmt.executeUpdate("insert into Dataset values('Lenovo', 4100)");
stmt.executeUpdate("insert into Dataset values('RedMi', 4000)");
stmt.executeUpdate("insert into Dataset values('OnePlus', 6334)");
Copier après la connexion

Pour chaque appel de méthode executeUpdate(), l'intégralité de l'instruction qu'elle contient est compilée et exécutée. Ici, si vous observez que seule la valeur de l'instruction est modifiée et que le reste de la requête est compilé inutilement.

Si vous écrivez une requête d'insertion à l'aide d'une instruction préparée pour insérer les mêmes données dans la même table, le code ressemblera à ceci :

PreparedStatement pstmt = con.prepareStatement("insert into Dataset values(?, ?)");

pstmt.setString(1, "Iphone");
pstmt.setInt(2, 3000);
pstmt.executeUpdate();

pstmt.setString(1, "Samsung");
pstmt.setInt(2, 4000);
pstmt.executeUpdate();

pstmt.setString(1, "Nokia");
pstmt.setInt(2, 5000);
pstmt.executeUpdate();

pstmt.setString(1, "Vivo");
pstmt.setInt(2, 1500);
pstmt.executeUpdate();

pstmt.setString(1, "Oppo");
pstmt.setInt(2, 900);
pstmt.executeUpdate();

pstmt.setString(1, "MI");
pstmt.setInt(2, 6400);
pstmt.executeUpdate();

pstmt.setString(1, "MotoG");
pstmt.setInt(2, 4360);
pstmt.executeUpdate();

pstmt.setString(1, "Lenovo");
pstmt.setInt(2, 4100);
pstmt.executeUpdate();

pstmt.setString(1, "RedMi");
pstmt.setInt(2, 4000);
pstmt.executeUpdate();

pstmt.setString(1, "MotoG");
pstmt.setInt(2, 4360);
pstmt.executeUpdate();

pstmt.setString(1, "OnePlus");
pstmt.setInt(2, 6334);
pstmt.executeUpdate();
Copier après la connexion

Ici, si vous observez que la requête d'insertion est préparée avec un espace réservé (?) et que la requête est compilé et stocké dans la base de données, et la valeur est ensuite transmise à l'aide de la méthode setter de l'interface PreparedStatement, évitant ainsi l'exécution inutile de l'instruction.

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:tutorialspoint.com
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal