当前位置:网站首页>[JDBC from starting to Real combat] JDBC Basic clearance tutoriel (Summary of the first part)
[JDBC from starting to Real combat] JDBC Basic clearance tutoriel (Summary of the first part)
2022-06-21 06:28:00 【Xiao Huang, Xiao Huang n'est plus confus.】
Page d'accueil personnelle:Page d'accueil du blog de Huang xiaohuang
️ Soutenez - moi: - Oui. Collection Attention
Devise:Un pas à la fois pour prendre ce qu'on appelle la chanceCet article vient de la colonne:JDBCDe l'entrée au combat
Bienvenue à la rubrique support Subscription ️
Catalogue des articles
1 JDBCGénéralités
Introduction:
- JDBCPour Accès à différentes bases de données Fournit une interface unifiée, Beaucoup de détails sont masqués pour l'utilisateur ;
- Java Les programmeurs utilisent JDBC,C'est bon. Connectez tout ce qui est fourniJDBCSystème de base de données du pilote, Cela permet d'effectuer diverses opérations sur la base de données .
JDBCSchéma schématique:
Description: JDBC En fin de compte, il s'agit de permettre aux développeurs de passer à travers Java Le programme accède à divers systèmes de base de données pris en charge .Et pourtant, Les fournisseurs peuvent varier d'une base de données à l'autre , Comme Oracle. 、Microsoft Corporation… … Comme nous ne connaissons pas la structure sous - jacente des systèmes de base de données des fournisseurs , Et si vous utilisez une base de données différente , Les méthodes utilisées ne sont pas uniformes , Ce n'est pas bon pour la gestion du programme .Réfléchis.,Si vous êtes Java Développeurs de fabricants , J'ai fini d'écrire le support MysqlCode,Mais Mysql Version itération mise à jour … … Vous devez réécrire le Code , Pour prendre en charge la version haute de la base de données !
Pour résoudre les problèmes susmentionnés,C'est bon. Par Java Procédure la société établit une série de spécifications , Fournir des interfaces pour la mise en œuvre par les fournisseurs de bases de données . Les fournisseurs de bases de données pris en charge peuvent implémenter les interfaces correspondantes ,De faireJava Le programme est accessible 、Fonctionnement de la base de données.
2 JDBCDémarrage rapide
2.1 JDBCÉtapes de programmation
- Enregistrer le pilote - Chargement Driver Catégorie;
- Obtenir la connexion - Je l'ai. Connection;
- Effectuer des opérations d'ajout, de suppression, de modification et de recherche - Envoyer SQL Voilà. mysql Mise en œuvre;
- Libérer des ressources - Fermer les connexions associées
2.2 JDBCLe premier programme de
On passe par là.JDBC- Oui. student Ajouter,Supprimer et modifier les actions, Voici les codes associés à la création d'une structure de tableau :
CREATE DATABASE mysqlforjdbctest;
USE mysqlforjdbctest;
CREATE TABLE student
( -- Formulaire étudiant
id INT PRIMARY KEY AUTO_INCREMENT, -- Numéro d'étudiant
name VARCHAR(20) NOT NULL DEFAULT '', -- Nom
sex CHAR(1) NOT NULL DEFAULT '', -- Sexe
birthday DATETIME, -- Anniversaire
phone VARCHAR(12) -- Numéro de téléphone portable
);
Et puis,On ouvre d'abord. idea Préparation opérationnelle ,Oui. mysql Le pilote de connexion correspondant est importé dans le Répertoire du projet , Pour plus de détails, voir la première section de cet article du blogueur :
Comment passerJDBCAccès àMysqlBase de données?
JDBCtest01Code:
Pour le Code url Quelques remarques:
- jdbc:mysql Représente l'accord,AdoptionjdbcPour se connectermysql;
- localhost Hôte,C'est possible.ipAdresse;
- 3306 Représentation mysql Port sur écoute;
- mysqlforjdbctest Connectez - vous à mysql Quelle base de données .
Pour le reste, voir les notes de code :
package com.hxh.jdbc;
import com.mysql.jdbc.Driver;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Properties;
/** * @author Xiao Huang Xiao Huang n'est plus confus * @version 1.0 */
public class JDBC01 {
public static void main(String[] args) throws SQLException {
// 1. Enregistrer le pilote
Driver driver = new Driver(); // CréationdriverObjet
// 2. Connectez - vous.
// jdbc:mysql Représente l'accord,AdoptionjdbcPour se connectermysql
// localhost Hôte,C'est possible.ipAdresse
// 3306 Représentation mysql Port sur écoute
// mysqlforjdbctest Connectez - vous à mysql Quelle base de données
String url = "jdbc:mysql://localhost:3306/mysqlforjdbctest";
// Oui. Nom d'utilisateur et mot de passe dans Properties Dans l'objet
Properties properties = new Properties();
properties.setProperty("user", "root"); // Utilisateurs
properties.setProperty("password", "111"); // Mot de passe( Saisissez le mot de passe correspondant à votre nom d'utilisateur )
// Selon le url Connexion à la base de données
Connection connect = driver.connect(url, properties);
// 3. Mise en œuvre sql
String sql = "INSERT INTO student VALUES(null, ' Tes haricots ', 'Femme', '2005-05-17', '13521987643')";
// statement Pour l'exécution statiqueSQL Instruction et renvoie l'objet dont le résultat a été généré
Statement statement = connect.createStatement();
int rows = statement.executeUpdate(sql); // Si oui DML Déclarations, Renvoie le nombre de lignes affectées
System.out.println(rows > 0 ? "Opération réussie!" : "L'opération a échoué!");
// 4. Fermer la connexion
statement.close();
connect.close();
}
}
Résultats de l'opération et changements dans le tableau :

2.3 Obtenir la connexion à la base de données5Comment?
Comment 1️⃣ Accès Driver Implémenter des objets de classe
Driver driver = new com.mysql.jdbc.Driver();
String url = "jdbc:mysql://localhost:3306/mysqlforjdbctest";
Properties properties = new Properties();
properties.setProperty("user", "root"); // Utilisateurs
properties.setProperty("password", "111"); // Mot de passe
Connection connection = driver.connect(url, properties);
Utilisé dans le Code com.mysql.jdbc.Driver(), Appartient à une charge statique,Faible flexibilité,Forte dépendance, Donc le mode 2 .
Comment 2️⃣ Utilisez le mécanisme de réflexion pour obtenir
Class clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver)clazz.newInstance();
String url = "jdbc:mysql://localhost:3306/mysqlforjdbctest";
Properties properties = new Properties();
properties.setProperty("user", "root"); // Utilisateurs
properties.setProperty("password", "111"); // Mot de passe
Connection connection = driver.connect(url, properties);
Comment 3️⃣ Utiliser DriverManager Remplacer Driver Gestion unifiée, En termes relatifs,Plus extensible
Class clazz = Class.forName("com.mysql.jdbc.Driver");
Driver driver = (Driver)clazz.newInstance();
String url = "jdbc:mysql://localhost:3306/mysqlforjdbctest";
String user = "root";
String password = "111";
DriverManager.registerDriver(driver); // InscriptionDriverDrive
Connection connection = DriverManager.getConnection(url, user, password);
Comment 4️⃣ Utiliser Class.forName Compléter automatiquement le pilote d'inscription,Code plus concis
Class clazz = Class.forName("com.mysql.jdbc.Driver");
String url = "jdbc:mysql://localhost:3306/mysqlforjdbctest";
String user = "root";
String password = "111";
Connection connection = DriverManager.getConnection(url, user, password);
La figure ci - dessous montre Driver Code source de la classe,Comme vous pouvez le voir,, Exception dans le bloc de code statique , Une fois que la classe est chargée .Et DriverManager.register(new Driver()) En fait, c'est en train d'enregistrer le pilote , Grâce à la simplicité du Code , Le mode 4 est également le mode le plus utilisé dans le développement réel .
Comment 5️⃣ Utiliser le profil, En fait, pour l'optimisation du mode 4 , Rendre la connexion à la base de données plus flexible ~
Tout d'abord,,In
srcNouveau fichier dans le répertoiremysql.properties;mysql.propertiesEnregistrer le nom d'utilisateur dans le fichier de configuration 、Mot de passe、urlAvecdriverInformation,Et sauvegardez.Comme le montre la figure ci - dessous::
Dans la classe correspondante ,Écrivez le code approprié
// Adoption Properties Objet obtenir des informations sur le profil
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properties"));
// Obtenir les valeurs associées
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driver = properties.getProperty("driver");
Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password);
3 ResultSetEnsemble de résultats
3.1 ResultSetDescription de l'ensemble de résultats
Introduction:
- Représentation Table de données pour l'ensemble de résultats de la base de données , Généralement généré par l'exécution d'une instruction pour interroger une base de données;
ResultSetObjet Gardez un curseur pointant vers sa ligne de données actuelle .Au départ,Le curseur précède la première ligne;nextMéthode pour déplacer le curseur vers la ligne suivante,Et parce que ResultSet Dans l'objet Renvoie quand il n'y a plus de lignes false, Union while La boucle peut traverser l'ensemble de résultats .
3.2 ResultSetCas de jeu de résultats
Tout d'abord,,Exécutez d'abord le code suivant,Pour student Tableau ajouter des données,Facile à tester.
INSERT INTO student VALUES (NULL, 'Lufy', 'Hommes', '2001-06-18', '13624567845');
INSERT INTO student VALUES (NULL, 'Joba.', 'Hommes', '2006-05-21', '13824063845');
️ Voici un exemple de code::
Dans le Code,statementMéthodeexecuteQuery(sql)Retour à un seulResultSetObjet de. Voir la note de code pour plus de détails :
package com.hxh.jdbc;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.util.Date;
import java.util.Properties;
/** * @author Xiao Huang Xiao Huang n'est plus confus * @version 1.0 */
public class ResultSetTest {
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properties"));
// Obtenir les valeurs associées
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driver = properties.getProperty("driver");
// 1. Enregistrer le pilote
Class.forName(driver);
// 2. Connectez - vous.
Connection connection = DriverManager.getConnection(url, user, password);
// 3. Je l'ai.Statement
Statement statement = connection.createStatement();
// 4. OrganisationSql
String sql = "SELECT id, name, sex, birthday FROM student";
// Exécuter unSQLDéclarations,L'instruction renvoie un seul ResultSet Objet
ResultSet resultSet = statement.executeQuery(sql);
// 5. UtiliserwhileExtraire les données
while (resultSet.next()){
// Déplacez le curseur vers l'arrière , S'il n'y a plus de lignes ,Alors quittez le cycle
int id = resultSet.getInt(1); // Obtenez la première colonne de la ligne
String name = resultSet.getString(2); // Obtenez la deuxième colonne de la ligne
String sex = resultSet.getString(3); // Obtenez la troisième colonne de la ligne
Date date = resultSet.getDate(4); // Obtenez la quatrième colonne de cette ligne
System.out.println(id + "\t" + name + "\t" + sex + "\t" + date);
}
// 6. Fermer la connexion
resultSet.close();
statement.close();
connection.close();
}
}
Résultats obtenus:
4 Statement
4.1 Statement Description et SQLInjection
Introduction:
- StatementObjet utilisé pour l'exécution statiqueSQL Instruction et renvoie l'objet dont le résultat a été généré ;
- Une fois la connexion établie,Besoin d'accéder à la base de données. Qu'il s'agisse d'exécuter des ordres ou SQLDéclarations,Tout peut passer par
Statement(ExistesqlInjection)、PreparedStatement(Prétraitement)、CallableStatement(Procédures stockées) Pour le faire.; - AdoptionStatementExécution de l'objetSQLDéclarations,ExisteSQLRisque d’injection! Attention!SQLInjection,En utilisantStatementUne extensionPreparedStatementRemplacerStatementC'est tout..
Pourquoi?SQLInjection?
Réponse:SQLL'injection est l'utilisation de certains systèmes qui ne vérifient pas suffisamment les données saisies par l'utilisateur,Et injecter illégalement dans les données d'entrée de l'utilisateurSQLSegment d'instruction ou commande,Attaques malveillantes contre la base de données!
4.2 UtiliserStatementConnexion analogique,PrésentationSQLRisque d’injection
Tout d'abord,,Par l'énoncé suivant,Créer une nouvelle table dans la base de données,admin, Stocker le nom d'utilisateur et le mot de passe :
CREATE TABLE admin
( -- Tableau des administrateurs
name VARCHAR(20) NOT NULL DEFAULT '', -- Nom d'utilisateur
pwd VARCHAR(20) NOT NULL DEFAULT '' -- Mot de passe
);
INSERT INTO admin VALUES ('nezuko', '123456');
INSERT INTO admin VALUES ('lingling', '111111');

️ Voici un exemple de code::
package com.hxh.jdbc;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.util.Date;
import java.util.Properties;
import java.util.Scanner;
/** * @author Xiao Huang Xiao Huang n'est plus confus * @version 1.0 */
public class LoginTest {
public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
Scanner scanner = new Scanner(System.in);
// L'utilisateur entre le nom d'utilisateur et le mot de passe
System.out.print("Nom d'utilisateur:");
String admin_name = scanner.nextLine();
System.out.print("Mot de passe:");
String admin_pwd = scanner.nextLine();
// AdoptionProperties Objet obtenir des informations de profil
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properties"));
// Obtenir les valeurs associées
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driver = properties.getProperty("driver");
// 1. Enregistrer le pilote
Class.forName(driver);
// 2. Connectez - vous.
Connection connection = DriverManager.getConnection(url, user, password);
// 3. Je l'ai.Statement
Statement statement = connection.createStatement();
// 4. OrganisationSql
String sql = "SELECT name, pwd FROM admin WHERE name ='"
+ admin_name + "' AND pwd = '" + admin_pwd + "'";
// Exécuter unSQLDéclarations,L'instruction renvoie un seul ResultSet Objet
ResultSet resultSet = statement.executeQuery(sql);
if(resultSet.next()){
// Si un enregistrement est interrogé, Cela signifie que l'utilisateur existe
System.out.println("Connexion réussie!");
}else {
System.out.println("Échec de la connexion!");
}
// 5. Fermer la connexion
resultSet.close();
statement.close();
connection.close();
}
}
Séance de démonstration:
- Essayez. Saisissez le nom d'utilisateur et le mot de passe corrects:

- Essayez. Saisissez le mauvais nom d'utilisateur et mot de passe :

- L'utilisateur est malveillant SQLInjection:

Parce que Statement L'entrée de l'utilisateur n'est pas pré - traitée , Et la logique qui détermine si vous êtes connecté est une mosaïque de noms d'utilisateur et de mots de passe entrés par l'utilisateur , Cela a conduit l'utilisateur à injecter malicieusement un nom d'utilisateur et un mot de passe universels , Réussite de l'inspection ~~
4.3 PreparedStatement Requête de prétraitement
Introduction:
- PreparedStatement Diagramme de classe:

PreparedStatementExécuté SQL Les paramètres de l'instruction sont utilisés avec (?)Pour représenter,AppelezPreparedStatementObjetsetXxx()Paramètres de réglage de la méthode.Le premier paramètre est à définir SQL Index des paramètres dans l'instruction (De1C'est parti.),La deuxième est mise en placeSQLValeur du paramètre dans l'instruction;executeQuery(),RetourResultSetObjet de l'ensemble de résultats;executeUpdate(),Effectuer des mises à jour, Par exemple, ajouter, supprimer et modifier .
PreparedStatement Avantages:
- N'est plus nécessaire + Pour assembler sql Déclarations, Les erreurs de syntaxe peuvent être réduites dans une certaine mesure ;
- Ça marche.sqlProblèmes d’injection;
- Réduit considérablement les temps de compilation,Plus efficace.
4.4 Résolution par prétraitement SQLInjection
Ou un exemple de connexion précédente ,Il suffit d'utiliserPreparedStatement,Les codes spécifiques sont les suivants:, Étapes voir les commentaires :
package com.hxh.jdbc;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.sql.*;
import java.util.Date;
import java.util.Properties;
import java.util.Scanner;
/** * @author Xiao Huang Xiao Huang n'est plus confus * @version 1.0 */
public class LoginTest {
public static void main(String[] args) throws IOException, SQLException, ClassNotFoundException {
Scanner scanner = new Scanner(System.in);
// L'utilisateur entre le nom d'utilisateur et le mot de passe
System.out.print("Nom d'utilisateur:");
String admin_name = scanner.nextLine();
System.out.print("Mot de passe:");
String admin_pwd = scanner.nextLine();
// AdoptionProperties Objet obtenir des informations de profil
Properties properties = new Properties();
properties.load(new FileInputStream("src\\mysql.properties"));
// Obtenir les valeurs associées
String user = properties.getProperty("user");
String password = properties.getProperty("password");
String url = properties.getProperty("url");
String driver = properties.getProperty("driver");
// 1. Enregistrer le pilote
Class.forName(driver);
// 2. Connectez - vous.
Connection connection = DriverManager.getConnection(url, user, password);
// 3. Je l'ai. PreparedStatement
// 3.1 OrganisationSql, ? équivalent à un substituant
String sql = "SELECT name, pwd FROM admin WHERE name = ? AND pwd = ?";
// 3.2 preparedStatement Objet implémenté PreparedStatementInterface
PreparedStatement preparedStatement = connection.prepareStatement(sql);
// 3.3 Voilà. ? Affectation
preparedStatement.setString(1, admin_name);
preparedStatement.setString(2, admin_pwd);
// 4. Mise en œuvre select Utiliser executeQuery, Si l'exécution est dmlDéclarations, Utiliser executeUpdate
ResultSet resultSet = preparedStatement.executeQuery();
if(resultSet.next()){
// Si un enregistrement est interrogé, Cela signifie que l'utilisateur existe
System.out.println("Connexion réussie!");
}else {
System.out.println("Échec de la connexion!");
}
// 5. Fermer la connexion
resultSet.close();
preparedStatement.close();
connection.close();
}
}
Résultats obtenus:
C'est réglé.sqlProblèmes d’injection!
À la fin
C'est tout ce qui précède , Le suivi se poursuivra Mise à jour gratuite,Si l'article vous aide,Bouge tes mains.Fais - moi plaisir. + Attention,Merci beaucoup! ️ ️ ️ !
En cas de problème, Message privé ou zone de commentaires sont les bienvenus !
Co - encouragement:“ Vos efforts intermittents et votre confusion , C'est une remise à zéro des efforts précédents .”
边栏推荐
- User defined thread pool
- Memorizing Normality to Detect Anomaly: Memory-augmented Deep Autoencoder for Unsupervised Anomaly D
- IP - RF data converter -04- API User Guide - system settings related functions
- 第13期:Flink零基础学习路线
- Roll in Dachang series LRU cache elimination algorithm
- 当今的数学是否过于繁琐?
- Pycharm的快捷键Button 4 Click是什么?
- 太厉害了MySQL总结的太全面了
- Fastdfs cluster
- tf. QueueBase
猜你喜欢

记录 Navicat 连接 PostgreSQL 无法显示对应表的问题

正则表达式基础

Pycharm的快捷键Button 4 Click是什么?

第7期:内卷和躺平,你怎么选

Aurora8b10b IP usage-03-ip configuration application guide

Asp. Net web API 2 Lesson 18 - working with entity relations in OData

我的高考经历与总结

数据库有用户更改密码问题

Deeply understand the gradient disappearance of RNN and why LSTM can solve the gradient disappearance

Aurora8b10b IP usage-01-introduction and port description
随机推荐
当今的数学是否过于繁琐?
MSF intranet penetration
IP - 射频数据转换器 -04- API使用指南 - ADC状态指示函数
FPGA - 7 Series FPGA selectio -04- ideay and ideayctrl of logical resources
Which of the children's critical illness insurance companies has the highest cost performance in 2022?
Aurora8b10b IP use-04-ip routine application example
高速缓存Cache(计算机组成原理笔记)
DDD Practice Manual (4. aggregate aggregate)
leetcode数据库mysql题目(难度:简单)
leetcode 410. Maximum value of split array - (Day30)
Pychart sets the default interpreter for the project
contos7 安装svn服务端
[data mining] final review Chapter 5
Chapter 1: overview of database system (final review of database)
Required questions for group planning: storage system (completed, with detailed analysis attached)
Aurora8B10B IP使用 -02- IP功能设计技巧
[JVM] classloader
认知语言学之框架与脚本
Answer the question: what do you think AgI should adopt?
Dragon Boat Festival - simple side navigation bar