Heim > Datenbank > MySQL-Tutorial > Warum sind vorbereitete Anweisungen schneller als Anweisungen in JDBC? erklären?

Warum sind vorbereitete Anweisungen schneller als Anweisungen in JDBC? erklären?

WBOY
Freigeben: 2023-08-26 17:57:06
nach vorne
806 Leute haben es durchsucht

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

Beim Ausführen einer Anweisung mithilfe eines Statement-Objekts, insbesondere beim Einfügen einer Anweisung, wird bei jeder Ausführung der Abfrage die gesamte Anweisung immer wieder kompiliert und ausgeführt, wobei der einzige Unterschied zwischen den Anweisungen im Wert der Anweisung besteht Stellungnahme.

Vorbereitete Anweisungen sind jedoch vorkompilierte Anweisungen, d. h. die Abfrage wird kompiliert und in der Datenbank gespeichert, wobei Platzhalter (?) anstelle von Werten verwendet werden und die Werte dieser Platzhalter später bereitgestellt werden.

Vermeiden Sie also immer wieder unnötige Kompilierungs- und Ausführungsanweisungen.

Beispiel

Angenommen, wir haben eine Tabelle mit dem Namen Dataset in der Datenbank, die Spalten mobile_brand und unit_sale enthält. Wenn wir mithilfe des Statement-Objekts Datensätze in diese Tabelle einfügen möchten, lautet der Code wie folgt: Darstellung:

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)");
Nach dem Login kopieren

Für jeden executeUpdate()-Methodenaufruf wird die gesamte darin enthaltene Anweisung kompiliert und ausgeführt. Hier stellen Sie fest, dass nur der Wert der Anweisung geändert wird und der Rest der Abfrage unnötigerweise kompiliert wird.

Wenn Sie eine Einfügeabfrage mithilfe einer vorbereiteten Anweisung schreiben, um dieselben Daten in dieselbe Tabelle einzufügen, sieht der Code wie folgt aus:

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();
Nach dem Login kopieren

Wenn Sie hier feststellen, dass die Einfügeabfrage mit Platzhalter (?) und der Abfrage vorbereitet ist wird kompiliert und in der Datenbank gespeichert, und der Wert wird später mit der Setter-Methode der PreparedStatement-Schnittstelle übergeben, wodurch eine unnötige Ausführung der Anweisung vermieden wird.

Das obige ist der detaillierte Inhalt vonWarum sind vorbereitete Anweisungen schneller als Anweisungen in JDBC? erklären?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:tutorialspoint.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage