Heim  >  Artikel  >  Datenbank  >  Warum sind vorbereitete Anweisungen schneller als Anweisungen in JDBC? erklären?

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

WBOY
WBOYnach vorne
2023-08-26 17:57:06744Durchsuche

为什么 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)");

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();

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:tutorialspoint.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen