La position actuelle:Accueil du site>Programmation JDBC pour MySQL

Programmation JDBC pour MySQL

2022-07-23 21:59:02Zzt. Opkk

MySQLDeJDBCProgrammation

1. Conditions de programmation de la base de données

  • Langage de programmation: Java,C,C++,Python…
  • Base de données: Oracle,MySQL,SQLServer…
  • Paquet pilote de base de données: Différentes bases de données,Différents paquets de pilotes de base de données sont disponibles pour différents langages de programmation,
    • Par exemple::MySQLOffreJavaDrive pack formysql-connector-java,Doit être basé surJavaFonctionnementMySQLCe paquet d'entraînement est nécessaire.La même chose.,
      À partir deJavaFonctionnementOracleLa base de données nécessiteOraclePaquet de pilotes de base de données pourojdbc .

2. JDBCProgrammation

JDBC,C'est - à - dire:Java Database Connectivity,javaConnexion à la base de données ,C'est un moyen d'exécuterSQLStatementJava API(Un terme assez largement utilisé dans les ordinateursApplication Programming InterfaceQuelques fonctions sont fournies/Méthodes/Catégorie,Peut être appelé directement par le programmeur pour remplir certaines fonctions),Appelé"Base de donnéesSDK"(software development kit, SDKUn concept plus large,En plus de fournirAPIAu - delà,Quelques programmes exécutables sont également disponibles(Outils)Développement auxiliaire/Mise en service…),Pour pouvoir utiliser cesAPIUn accès plus facile au serveur de base de données.

PourMySQL/Oracle/SQLServerC'est un client./Programmes pour la structure du serveur, La base de données des opérations est Par l'intermédiaire d'un client en ligne de commande officiellement fourni /Interface graphique/Code Lequel d'entre eux ? Aujourd'hui, la base de données principale est gérée par Code .

Dans les premières bases de données disponibles APITout est différent, Très hostile aux programmeurs ,Et donc,JavaFournir un ensemble"Critères" Système d'interface pour , Laissez ces fournisseurs de bases de données .FourniAPITout le monde.Java Adaptation dans ce système d'interface , Donc le programmeur a juste besoin de maîtriser JavaCelui - ciAPI Pour s'adapter à toutes les bases de données courantes .Java De cette base de données opérationnelle API,Ça s'appelleJDBC.

3. JDBCComment ça marche

JDBC Fournit un accès uniforme à une variété de bases de données relationnelles,Accès en tant que base de données propre au fournisseurAPIUne abstraction avancée de,Il contient principalement des classes d'interface communes

JDBCAccéder à la hiérarchie des bases de données:

[Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-M7jd2PDR-1658300956096)(C:\Users\a\AppData\Roaming\Typora\typora-user-images\image-20220717150318903.png)]

JDBCAvantages:

  • JavaLe fonctionnement de la base de données d'accès linguistique est entièrement orienté vers la programmation d'interface abstraite
  • Le développement d'applications de base de données n'est pas limité à un fournisseur de base de données spécifiqueAPI
  • La portabilité des programmes s'est considérablement améliorée

4. JDBCUtilisation de

4.1 Fonctionnement de la base de données - Insérer

  1. Pour manipuler la base de données, Connectez - vous d'abord à la base de données , Pour se connecter à la base de données , Il faut décrire l'emplacement de la base de données .InJDBCMoyenne,UtiliserDataSource Cette classe décrit MySQLEmplacement du serveur,

    //DataSourceC'est uninterface,Impossible d'instancier directement.EtMysqlDataSourceC'est ce qui s'est passéDataSource, Cette classe vient d'un paquet d'entraînement .
    //Cette opération est - La transition vers le haut
    DataSource dataSource = new MysqlDataSource();
    //Connexion au serveur - Vers le bas
    ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java104?characterEncoding=utf8&useSSL=false");
    

    Il y aura des questions ici , Pourquoi ne pas l'utiliser directement MysqlDataSource Pour instancier l'objet ? Ce n'est pas très pratique ?

    MysqlDataSource dataSource = new MysqlDataSource();
    dataSource.setUrl();
    

    Bien qu'il n'y ait pas de différence entre les deux styles . Mais dans le développement réel, il est possible de voir plus de la première écriture .

    • Dans la première écriture ,Je l'ai.La source des données est DataSourceType. Écrivez d'autres codes plus tard ,Méthodes/Catégorie, Si vous utilisez une source de données , Le type de détention est également DataSourceType,DataSource- Oui.Type générique, Peut se référer à n'importe quelle base de données . Quand l'avenir sera nécessaire Remplacer la base de données, Les modifications de code sont très mineures , Il suffit de changer ce petit morceau de code d'Instanciation , Aucun autre code n'a besoin d'être modifié .
    • La deuxième écriture, La source de données obtenue est MysqlDataSourceType. Autres codes suivants ,Méthodes/Catégorie, Si une source de données est utilisée , Le type de détention est MysqlDataSource,EtMysqlDataSourceUniquement pourMySQLType de. Une fois la base de données remplacée , Il faudra peut - être disperser le Code MysqIDataSourceType modifié.

    La première écriture améliore considérablement la maintenabilité du Code ,Extensibilité.

    //MySQLConnexion de donnéesURLLe format des paramètres est le suivant:
    jdbc:mysql://Adresse du serveur:Port/Nom de la base de données?Nom du paramètre=Valeur du paramètre
    

    [Impossible de transférer l'image de la chaîne externe,Il peut y avoir un mécanisme antivol à la station source,Il est recommandé de sauvegarder l'image et de la télécharger directement(img-KDaYDy3a-1658300956098)(C:\Users\a\AppData\Roaming\Typora\typora-user-images\image-20220717155040996.png)]

​ Saisissez le nom d'utilisateur et le mot de passe:

((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("123456");

Donc à traversIPAdresse,Numéro de port,Nom de la base de données, Le nom d'utilisateur et le mot de passe décrivent l'emplacement de la base de données .

  1. Créer une connexion au serveur de base de données

Dans la communication réseau,Il y a deux styles,L'un est’Connecté’,équivalent à"Appelle";L'autre est’Pas de connexion’,équivalent à"Envoyer Wechat".

Les données sont "Connecté"De la façon dont, Surtout avant la communication , Vérifiez d'abord si le lien de communication est lisse , Il y a un inconvénient. , La connexion doit être gérée , Les connexions inutilisées doivent être libérées à temps (Comme au téléphone., Oublie de raccrocher , Impossible de déconnecter , Les frais de téléphone restent ~~).

// Importerimport java.sql.ConnectionEnveloppéConnectionCatégorie
Connection connection = dataSource.getConnection();
System.out.println(connection);
// Si l'objet de sortie est  [email protected]  Description de la connexion réussie 
// Et attention à lancer une exception  Importerimport java.sql.SQLException; 
  1. Fonctionnement de la base de données

UtiliserSQLDéclarations,UtilisationJDBCPour exploiter la base de données,Essence ou utilisationSQLPour exploiter la base de données

// Créer une base de données
create table student(id int primary key, name varchar(20));

String sql = "insert into student values(1, 'Zhang San');";

AdoptionPreparedStatement L'objet est venu dire SQLDéclarations exécutées,De cet objetSQL Ça vient de cette chaîne .

PreparedStatement statement = connection.prepareStatement(sql);

Vous pouvez également le remplir de la façon suivante :

Scanner in = new Scanner(System.in);
System.out.println("Veuillez saisir le numéro d'étudiant:");
int id = in.nextInt();
System.out.println("Veuillez saisir un nom:");
String name = in.next();
String sql = "insert into student values(?, ?);";//? Pour le substituant
PreparedStatement statement = connection.prepareStatement(sql);
statement.setInt(1, id); // Par défaut à partir de1C'est parti.
statement.setString(2, name);
  1. Mise en œuvreSQLDéclarations
int n = statement.executeUpdate();
System.out.println(n);

Ici.insert,update,deleteC'est par executeUpdate Pour mettre en œuvre, La valeur de retour est un entier, Indique que cette opération affecte plusieurs lignes ,select C'est par executeQuery Pour mettre en œuvre.

  1. Déconnecter
statement.close();
connection.close();

Note:: La première version créée plus tard

4.2 Fonctionnement

4.2.1 Modifier l'enregistrement

 public static void main(String[] args) throws SQLException {
    
        //1. Source des données trouvée
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java_learn?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2. Établir une connexion
        Connection connection = dataSource.getConnection();

        //3.  Saisissez les informations de modification 
        Scanner in = new Scanner(System.in);
        System.out.println(" Veuillez saisir le numéro d'étudiant modifié :");
        int id = in.nextInt();
        System.out.println(" Nom modifié de l'étudiant :");
        String name = in.next();

        //3. ConstruireSQLDéclarations
        String sql = "update student set name = ? where id = ?";
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
        statement.setString(2, name);

        //4. Mise en œuvreSQL
        int n = statement.executeUpdate();
        System.out.println(n);

        //5. Fermer la ressource
        statement.close();
        connection.close();

    }

4.2.2 Supprimer l'enregistrement

public static void main(String[] args) throws SQLException {
    
    //1. Source des données trouvée
    DataSource dataSource = new MysqlDataSource();
    ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java_learn?characterEncoding=utf8&useSSL=false");
    ((MysqlDataSource)dataSource).setUser("root");
    ((MysqlDataSource)dataSource).setPassword("123456");

    //2. Créer une connexion
    Connection connection = dataSource.getConnection();

    //3.  Saisissez les informations d'enregistrement pour supprimer la paire 
    Scanner in = new Scanner(System.in);
    System.out.println(" Veuillez entrer pour supprimer le numéro d'étudiant :");
    int id = in.nextInt();

    //4. ConstruireSQL
    String sql = "delete from student where id = ?";
    PreparedStatement statement = connection.prepareStatement(sql);
    statement.setInt(1, id);

    //5. Mise en œuvreSQL
    int n = statement.executeUpdate();
    System.out.println(n);

    //6. Fermer la ressource
    statement.close();
    connection.close();
}

4.2.3 Trouver des enregistrements

    public static void main(String[] args) throws SQLException {
    
        //1. Créer une source de données
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java_learn?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2. Connexion à la base de données
        Connection connection = dataSource.getConnection();

        //3. Aucune entrée requise

        //4. ConstruireSQL
        String sql = "select * from student";
        PreparedStatement statement = connection.prepareStatement(sql);

        //5. Mise en œuvreSQL
        //executeQueryLa valeur de retour pour estResultSetObjet,  On peut le considérer comme un  Tableau provisoire
        ResultSet resultSet = statement.executeQuery();

        //6. Traverser l'ensemble de résultats
        //Prends ça. resultSet  En tant qu'Itérateur 
        while (resultSet.next()) {
    
            // AdoptiongetXXX Méthodes, Pour obtenir

            // Prends - le.id, idLe type estint, UtilisergetInt
            int id = resultSet.getInt("id");
            //Prends - le.name, Le type estString UtilisergetString
            String name = resultSet.getString("name");
            System.out.println(id + ":" + name);
        }

        //7. Fermer la ressource
        statement.close();
        connection.close();
    }

4.2.4 Insérer un enregistrement

    public static void main(String[] args) throws SQLException {
    
        //1. Obtenir l'emplacement de la base de données
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource)dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/java_learn?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource)dataSource).setUser("root");
        ((MysqlDataSource)dataSource).setPassword("123456");

        //2. Connexion à la base de données
        Connection connection = dataSource.getConnection();
        System.out.println(connection);

        //3. UtiliserSQLDéclarations,UtilisationJDBCPour exploiter la base de données,L'essence ou parSQLPour opérer
        /*String sql = "insert into student values(3, 'Zhang San');";*/
        
        Scanner in = new Scanner(System.in);
        System.out.println("Veuillez saisir le numéro d'étudiant:");
        int id = in.nextInt();
        System.out.println("Veuillez saisir un nom:");
        String name = in.next();
        String sql = "insert into student values(?, ?);";
        PreparedStatement statement = connection.prepareStatement(sql);

        statement.setInt(1, id);
        statement.setString(2, name);
        
        //4. Mise en œuvreSQLDéclarations
        // insert,update,deleteC'est par executeUpdate Pour mettre en œuvre
        // select C'est par executeQuery Pour mettre en œuvre
        // La valeur de retour est un entier,  Indique que cette opération affecte plusieurs lignes 
        int n = statement.executeUpdate();
        System.out.println(n);
        
        //5. Déconnecter
        statement.close();
        connection.close();
    }

4.3 Connexion à la base de données

ConnectionLa classe de mise en œuvre de l'interface est fournie par la base de données,AccèsConnectionLes objets ont généralement deux façons :

  • AdoptionDriverManager(Drive Management class)Méthode statique pour obtenir
// ChargementJDBCPilote
Class.forName("com.mysql.jdbc.Driver");
// Créer une connexion à la base de données
Connection connection = DriverManager.getConnection(url);
  • AdoptionDataSource(Source des données)Acquisition d'objets.Dans la pratiqueDataSourceObjet
DataSource dataSource = new MysqlDataSource();
((MysqlDataSource)dataSource).setUrl("url");
((MysqlDataSource)dataSource).setUser("root");
((MysqlDataSource)dataSource).setPassword("123456");
Connection connection = dataSource.getConnection();

Différence:

  1. DriverManagerClasse pour obtenirConnectionConnexion,- Oui.Impossible de réutiliserDe,Chaque fois qu'une ressource est libérée après utilisation,Adoptionconnection.close()C'est la fermeture des connexions physiques.
  2. DataSourcePrise en charge des pools de connexion.Le pool de connexions crée un certain nombre de connexions à la base de données lors de l'initialisation,Ces connexions sontRéutilisable,Chaque fois que la connexion à la base de données est terminée,Libérez l'appel de ressourcesconnection.close()Tous.Oui.ConncetionRecyclage des objets connectés.

4.4 StatementObjet

StatementL'objet principal est deSQLInstruction envoyée à la base de données.JDBC APIIl existe trois types principauxStatementObjet

Ce qui est le plus souvent utilisé dans le développement réelPreparedStatementObjet,Voici un résumé :

Valeur de retour:

  • executeQuery() Renvoie un seul Ensemble de résultats,Généralement utilisé pourselectDéclarations
  • executeUpdate()La valeur de retour de la méthode estUn entier,Indique le nombre de lignes touchées,Généralement utilisé pourupdate、insert、deleteDéclarations

4.5 ResultSetObjet

ResultSetObjet il s'appelle l'ensemble de résultats,Il représente la conformité avecSQLToutes les lignes d'une condition d'instruction,Et ça passe par un ensemble degetXXXMéthodes disponibles
Accès aux données de ces lignes .

=“C:\Users\a\AppData\Roaming\Typora\typora-user-images\image-20220717203426690.png” alt=“image-20220717203426690” style=“zoom:50%;” />

Valeur de retour:

  • executeQuery() Renvoie un seul Ensemble de résultats,Généralement utilisé pourselectDéclarations
  • executeUpdate()La valeur de retour de la méthode estUn entier,Indique le nombre de lignes touchées,Généralement utilisé pourupdate、insert、deleteDéclarations

4.5 ResultSetObjet

ResultSetObjet il s'appelle l'ensemble de résultats,Il représente la conformité avecSQLToutes les lignes d'une condition d'instruction,Et ça passe par un ensemble degetXXXMéthodes disponibles
Accès aux données de ces lignes .

ResultSetLes données sont disposées ligne par ligne,Plusieurs champs par ligne,Et il y a Un pointeur d'enregistrement ,La ligne de données à laquelle se réfère le pointeur est appelée la ligne de données courante,Nous Ne peut fonctionner que sur la ligne de données courante .Si nous voulons obtenir un enregistrement,On va l'utiliser.ResultSetDenext()Méthodes ,Si nous voulonsResultSetÀ l'intérieur.Tous les enregistrements,Il aurait dûUtiliserwhileCycle

Mentions de copyright
Auteur de cet article [Zzt. Opkk],Réimpression s’il vous plaît apporter le lien vers l’original, merci
https://fra.chowdera.com/2022/204/202207232157186784.html

Recommandé au hasard