[JAVA] Über die Vorzüge von Datenbankbindungsvariablen sprechen ((1) Einführung)

2018/7/14 Vollständige Überarbeitung

====================================================================

** 0. Einleitung **

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.

** 1. Was ist eine "Bindevariable"? ** ** **

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 email
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.

** 2. Deklaration von "Bindevariable" **

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.

Fußnote

(※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

Über die Vorzüge von Datenbankbindungsvariablen sprechen ((1) Einführung)
Sprechen Sie über die Vorteile von Datenbankbindungsvariablen (② Verdienst: Verhinderung der SQL-Injection)
[Ausgabe] Informationen zur Datenbank
Über den Umgang mit Null
Informationen zur Beschreibung von Docker-compose.yml
[Java] Ich habe über die Vorzüge und Verwendungen von "Schnittstelle" nachgedacht.
Über das Verhalten von Ruby Hash # ==
Über die Grundlagen der Android-Entwicklung
Informationen zur Rolle der Initialisierungsmethode
Denken Sie an die 7 Regeln von Optional
[Ruby] Zeigt den Inhalt von Variablen an
Informationen zur Protokollebene von java.util.logging.Logger
Was ist ein Test? ・ Über die Wichtigkeit eines Tests
Punkt 57 Minimieren Sie den Umfang lokaler Variablen
Informationen zur Funktionsweise von next () und nextLine ()
Punkt 57: Minimieren Sie den Umfang lokaler Variablen
Informationen zur ersten Anzeige von Spring Framework
Ausgabe des Buches "Einführung in Java"
Über die Behandlung von BigDecimal (mit Reflexion)
Über die Anzahl der Threads von Completable Future
Informationen zur Bedeutung von Typvariablen, E, T usw., die in in Java verwendeten Generika verwendet werden
Denken Sie an die Kombination von Servlet und Ajax
Informationen zur Beschreibungsreihenfolge der Java-Systemeigenschaften
[Ruby on Rails] Bis zur Einführung von RSpec
Informationen zu next () und nextLine () der Scannerklasse