[JAVA] Parler des mérites des variables de liaison de base de données ((1) Introduction)

2018/7/14 Révision complète

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

** 0. Introduction **

Il s'agit de zd6ir7. Ce sera le premier message. Je vous remercie.

Comme le sujet le dit, je voudrais partager avec vous les avantages de l'utilisation des variables de liaison de base de données. Je voudrais mentionner à l'avance, mais veuillez noter que certains détails ont été omis par souci de clarté.

** 1. Qu'est-ce qu'une "variable de liaison"? ** **

Tout d'abord, qu'est-ce qu'une "variable de liaison"? Je vais parler de (* 1). Certaines instructions SQL émises sur le SGBD varient en fonction de la valeur donnée de l'extérieur. Par exemple, considérons un USER TABLE qui contient les informations utilisateur suivantes (* 2).

id passwrod username email
22222 password2 Ruffy [email protected]
55555 password5 Sakuragi Hanamichi [email protected]
11111 password1 Momotaro Ken [email protected]
33333 password3 Chatouiller [email protected]

Supposons que vous ayez un SQL qui récupère les informations pour cette table en fonction de votre ID utilisateur et de votre mot de passe.

SELECT * FROM USERTABLE WHERE ID='XXX' AND PASSWORD='YYY'; (XXX et YYY sont des valeurs provisoires.)

Bien entendu, l'ID utilisateur et le mot de passe varient en fonction de l'utilisateur, et la valeur donnée à l'ID de colonne (XXX) et la valeur donnée à la colonne PASSWORD (YYY) changent naturellement.

Par conséquent, préparez une boîte pour ID et une boîte pour PASSWORD afin que diverses valeurs puissent être stockées. Ces «boîtes» sont appelées des variables de liaison. Cela signifie préparer une boîte, c'est-à-dire déclarer une variable de liaison.

** 2. Déclaration de "variable de liaison" **

Alors à quoi ressemble exactement la déclaration d'une variable de liaison? Le code qui émet le SQL ci-dessus dans une application Java est présenté à titre d'exemple.

//Déclarez SQL. Pour l'ID de colonne et le mot de passe,?En insérant ", celles-ci sont déclarées comme étant des variables de liaison.
String sql = "select * from app.usertable where id = ? and password = ?";
//Préparez un PreparedStatement pour émettre le SQL qui stocke les variables de liaison.
preparedStatement = connection.prepareStatement(sql);
//Attribuez une valeur à id. Ce "1" fait référence à la première variable de liaison id.
preparedStatement.setInt(1, 11111);
//Attribuez une valeur au mot de passe. Ce «2» fait référence au deuxième mot de passe de la variable de liaison.
preparedStatement.setString(2, "password1");
//Obtenez le résultat.
resultSet = preparedStatement.executeQuery();

Vous pouvez également émettre du SQL sans déclarer de variables de liaison. En Java également, l'exemple de code est illustré ci-dessous (* 3).

//Préparez une déclaration.
statement = connection.createStatement();
//Déclarez SQL. Configurez SQL avec un ID et un mot de passe variables.
String sql = "select * from app.usertable where id = 11111 and password = 'password1'";
//Obtenez le résultat.
resultSet = statement.executeQuery(sql);

Pourquoi dois-je déclarer une variable de liaison quand il existe un moyen de ne pas utiliser une variable de liaison comme celle-ci? De la prochaine fois, je voudrais présenter deux mérites.

note de bas de page

(※1) Aussi, concernant les "variables de liaison", veuillez vous référer à l'URL suivante pour des explications faciles à comprendre. http://wa3.i-3-i.info/word12449.html

Les "variables de liaison" sont appelées par ce nom dans Oracle, DB2, etc., mais dans MySQL, les "variables définies par l'utilisateur" (https://dev.mysql.com/doc/refman/5.6/ja/user-variables. Il semble que cela s'appelle html). Veuillez vous référer au manuel pour savoir comment s'appelle le SGBD que vous utilisez.

(※2) Le mot de passe est stocké dans le tableau tel quel, mais veuillez le pardonner à titre d'exemple. Normalement, il est codé et stocké.

(※3) Lors de l'émission de SQL avec des variables de liaison, Java utilise la classe PreparedStatement. D'autre part, si vous ne le faites pas, utilisez la classe Statement. La littérature suivante souligne que la première classe est supérieure en termes de performances en ce qu'elle peut regrouper et réutiliser des informations sur le SQL exécuté.

O'Reilly Japon - Performance Java 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

De plus, j'ai fait référence au document ci-dessus lors de la publication de l'exemple de code cette fois.

Recommended Posts

Parler des mérites des variables de liaison de base de données ((1) Introduction)
Parlez des mérites des variables de liaison de base de données (② Mérite: Prévention de l'injection SQL)
[Sortie] À propos de la base de données
À propos de la gestion de Null
À propos de la description de Docker-compose.yml
[Java] J'ai réfléchi aux mérites et aux utilisations de "interface"
À propos du comportement de ruby Hash # ==
À propos des bases du développement Android
À propos du rôle de la méthode initialize
Pensez aux 7 règles d'Optionnel
[Ruby] Afficher le contenu des variables
À propos du niveau de journalisation de java.util.logging.Logger
Qu'est-ce qu'un test? ・ À propos de l'importance d'un test
Point 57 Réduire la portée des variables locales
À propos du fonctionnement de next () et nextLine ()
Point 57: Minimiser la portée des variables locales
À propos de l'affichage initial de Spring Framework
Sortie du livre "Introduction à Java"
À propos du traitement de BigDecimal (avec réflexion)
À propos du nombre de threads de Completable Future
À propos de la signification des variables de type, E, T, etc. utilisées dans les génériques utilisés en Java
Pensez à la combinaison de Servlet et Ajax
A propos de l'ordre de description des propriétés système Java
[Ruby on Rails] Jusqu'à l'introduction de RSpec
À propos de next () et nextLine () de la classe Scanner