2018/7/14 Vollständige Überarbeitung
====================================================================
Es ist zd6ir7. Es wird der erste Beitrag sein. Vielen Dank.
Wie der Betreff sagt, möchte ich Ihnen die Vorteile der Verwendung von Datenbankbindungsvariablen mitteilen. Ich möchte im Voraus erwähnen, aber bitte beachten Sie, dass einige Details aus Gründen der Klarheit weggelassen wurden.
Was ist eine "Bindevariable"? Ich werde über (* 1) sprechen. Einige an das DBMS ausgegebene SQL-Anweisungen variieren je nach dem von außen angegebenen Wert. Stellen Sie sich beispielsweise eine USER TABLE vor, die die folgenden Benutzerinformationen enthält (* 2).
id | passwrod | username | |
---|---|---|---|
22222 | password2 | Ruffy | [email protected] |
55555 | password5 | Sakuragi Hanamichi | [email protected] |
11111 | password1 | Momotaro Ken | [email protected] |
33333 | password3 | Kitzeln | [email protected] |
Angenommen, Sie haben eine SQL, die Informationen für diese Tabelle basierend auf Ihrer Benutzer-ID und Ihrem Kennwort abruft.
SELECT * FROM USERTABLE WHERE ID='XXX' AND PASSWORD='YYY'; (XXX und YYY sind vorläufige Werte.)
Natürlich variieren die Benutzer-ID und das Kennwort je nach Benutzer, und der Wert für die Spalten-ID (XXX) und der Wert für die Spalte PASSWORT (JJJ) ändern sich natürlich.
Bereiten Sie daher eine Box für ID und eine Box für PASSWORD vor, damit verschiedene Werte gespeichert werden können. Diese "Boxen" werden Bindungsvariablen genannt. Es bedeutet, eine Box vorzubereiten, dh eine Bindevariable zu deklarieren.
Wie genau ist es also, eine Bindevariable zu deklarieren? Der Code, der das obige SQL in einer Java-Anwendung ausgibt, wird als Beispiel gezeigt.
//SQL deklarieren. Für Spalten-ID und Passwort:?Durch Einfügen von "werden diese als Bindungsvariablen deklariert.
String sql = "select * from app.usertable where id = ? and password = ?";
//Bereiten Sie ein PreparedStatement vor, um die SQL auszugeben, in der die Bindevariablen gespeichert sind.
preparedStatement = connection.prepareStatement(sql);
//Weisen Sie einen Wert für id zu. Diese "1" bezieht sich auf die erste Bindungsvariablen-ID.
preparedStatement.setInt(1, 11111);
//Weisen Sie dem Passwort einen Wert zu. Diese "2" bezieht sich auf das zweite Kennwort für die Bindungsvariable.
preparedStatement.setString(2, "password1");
//Holen Sie sich das Ergebnis.
resultSet = preparedStatement.executeQuery();
Sie können SQL auch ausgeben, ohne Bindungsvariablen zu deklarieren. Auch in Java wird das Codebeispiel unten gezeigt (* 3).
//Bereiten Sie eine Erklärung vor.
statement = connection.createStatement();
//SQL deklarieren. Konfigurieren Sie SQL mit der Variablen-ID und dem Kennwort.
String sql = "select * from app.usertable where id = 11111 and password = 'password1'";
//Holen Sie sich das Ergebnis.
resultSet = statement.executeQuery(sql);
Warum muss ich eine Bindevariable deklarieren, wenn es eine Möglichkeit gibt, eine solche Bindevariable nicht zu verwenden? Ab dem nächsten Mal möchte ich zwei Vorzüge vorstellen.
(※1) Informationen zu "Bindungsvariablen" finden Sie unter der folgenden URL, um leicht verständliche Erklärungen zu erhalten. http://wa3.i-3-i.info/word12449.html
"Bindungsvariablen" werden in Oracle, DB2 usw. unter diesem Namen aufgerufen, in MySQL jedoch als "benutzerdefinierte Variablen" (https://dev.mysql.com/doc/refman/5.6/ja/user-variables). Es scheint, dass es html heißt). Informationen zum Aufruf des von Ihnen verwendeten DBMS finden Sie im Handbuch.
(※2) Das Passwort wird so wie es ist in der Tabelle gespeichert, aber bitte verzeihen Sie es als Beispiel. Normalerweise wird es codiert und gespeichert.
(※3) Bei der Ausgabe von SQL mit Bindevariablen verwendet Java die PreparedStatement-Klasse. Wenn Sie dies nicht tun, verwenden Sie die Statement-Klasse. In der folgenden Literatur wird darauf hingewiesen, dass die frühere Klasse hinsichtlich der Leistung überlegen ist, da sie Informationen über die ausgeführte SQL bündeln und wiederverwenden kann.
O'Reilly Japan - Java-Leistung https://www.oreilly.co.jp/books/9784873117188/
OCP: Oracle Certified Professional Java SE 8 Programmer II Study Guide: Exam 1Z0-809 http://as.wiley.com/WileyCDA/WileyTitle/productCd-1119067901,miniSiteCd-SYBEX.html
Außerdem habe ich dieses Mal auf das obige Dokument verwiesen, als ich das Codebeispiel gepostet habe.
Recommended Posts