Verwenden Sie PreparedStatement in Java
Für Stapel und Anwendungen, für die eine DB-Verbindung erforderlich ist, werden normalerweise die folgenden Klassen verwendet, um den Verbindungsprozess zu implementieren.
--java.sql.Connection-Klasse
--java.sql.Statement-Klasse
--java.sql.ResultSet-Klasse
In letzter Zeit scheint es jedoch beliebt zu sein, die Klasse java.sql.PreparedStatement anstelle der Klasse Statement zu verwenden.
Ich werde den Grund aufschreiben.
Grund
- Maßnahmen gegen SQL-Injection
- Wie der Name schon sagt, wird SQL in der Datenbank zwischengespeichert, sodass die Verarbeitungsgeschwindigkeit schneller wird, wenn dieselbe SQL-Anweisung wiederholt ausgegeben wird.
Wie benutzt man
Verwendung im Vergleich zur Statement-Klasse.
Für Anweisungsklasse
- Holen Sie sich ein Objekt der Statement-Klasse.
Es kann mit dem Objekt .createStatement () der Connection-Klasse abgerufen werden.
- Führen Sie eine SQL-Anweisung mit einem Objekt der Statement-Klasse aus.
Es kann mit dem Statement-Klassenobjekt .execute () ausgeführt werden.
Connection con = DriverManager(hoge,hoge,hoge);
String sql = "select name from hogeData where id = '1'";
Statement st = con.createStatement(sql);
st.execute();
Für die PreparedStatement-Klasse
- Ersetzen Sie den Wert der SQL-Anweisung, die Sie ausführen möchten, durch?. Zu diesem Zeitpunkt ist es nicht erforderlich, es in ein einfaches Anführungszeichen zu setzen.
- Rufen Sie ein Objekt der PreparedStaetment-Klasse ab.
Es kann mit dem Objekt .preparedStatement () der Connection-Klasse abgerufen werden. Übergeben Sie die SQL-Anweisung als Argument.
- Fügen Sie im Objekt .setHoge () der PreparedStatement-Klasse einen Wert in? Ein. Zu diesem Zeitpunkt setInt () für den Integer-Typ und setString () für den Wert des String-Typs.
Geben Sie im Argument die Position von? An. Wenn es das erste? From? Ist, übergeben Sie auf der linken Seite der SQL-Anweisung 1 im ersten Argument und den Wert, den Sie in das zweite Argument einfügen möchten.
- Es kann mit dem Objekt .executeQuery () oder .executeUpdate () der PreparedStatement-Klasse ausgeführt werden.
Die verwendete Methode hängt vom Vorhandensein oder Fehlen des zurückgegebenen ResultSet ab.
Connection con = DriverManager(hoge,hoge,hoge);
String sql = "select name from hogeData where id = ?";
Statement st = con.preparedStatement(sql);
st.setInt(1, 1);
ResultSet rs = st.executeQuery();
Wenn Sie genauer wissen möchten, warum Sie es verwenden sollten, lesen Sie unten.
(Ich werde es später hinzufügen)