2018/7/14 Révision complète
====================================================================
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é.
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 | |
---|---|---|---|
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.
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.
(※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