[À propos de JDBC qui connecte Java et SQL]

introduction

Puisqu'il était difficile d'implémenter JDBC (Java Database Connectivity) qui connecte Java et SQL, je le laisserai en mémoire.

Environnement de développement

・ OS  Windows10 ·éditeur  Ecripse ・ Java  OpenJDK 8 ・ SQL  MySQL

1, qu'est-ce que JDBC

JDBC (Java Database Connectivity) est une API pour connecter Java et RD et fonctionner à partir de Java. Vous pouvez utiliser le concept de JDBC pour enregistrer, mettre à jour et supprimer des données de Java vers SQL et pour récupérer des données de SQL. Il existe différents types de bases de données comme Oracle, MySQL, SQL Server, etc., et la méthode de connexion à chaque base de données dépend du type de base de données. Cela changera, mais si vous vous connectez à une base de données via JDBC, vous pourrez y accéder sans vous soucier de l'individualité de chaque base de données.

Il y avait un article facile à comprendre comme l'histoire de JDBC, donc je vais le poster. https://data.wingarc.com/what-is-api-16084

2, mise en œuvre

Pour l'implémentation, suivez la procédure ci-dessous pour implémenter JDBC. ① Chargement du pilote JDBC ② Etablir une connexion avec SQL ③ Envoyer une instruction SQL ④ Acquisition du résultat de l'exécution ⑤ Déconnecter

2-① ① Chargement du pilote JDBC

Chargez le pilote (créez un objet Class en mémoire) à l'aide de la méthode Class.forName. -Une méthode pour charger les fichiers de code d'octet Java (l'extension est un fichier de classe). -Spécifiez une chaîne de caractères (nom du package, nom de la classe) qui représente la classe comme argument. -Si le chargement échoue, une exception ClassNotFoundException se produira, donc Il est nécessaire d'essayer ~ catch lors de son utilisation. Déclarez d'abord la variable dans le champ pour pouvoir l'utiliser ultérieurement comme variable.

MessageDao.java


public class MessageDao {
  //Déclarer les variables nécessaires à la connexion
  private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
  private static final String JDBC_URL  = "jdbc:oracle:thin:@localhost:1521:ORCL";
  private static final String USER_ID   = "imuser";
  private static final String USER_PASS = "impass";

  MessageDao (){
        //Chargement du pilote JDBC
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Si vous l'exécutez dans cet état, vous obtiendrez une erreur java.lang.ClassNotFonudException. Pour accéder à la base de données à partir de l'application Java Tout d'abord, vous devez obtenir le pilote JDBC spécifique au SGBDR fourni par le fournisseur. De plus, il est nécessaire de définir des paramètres pour que le pilote JDBC obtenu puisse être utilisé à partir de programmes Java. Le pilote JDBC peut être téléchargé à partir du site Web d'Oracle. https://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.htm

Une fois le téléchargement terminé, il existe un fichier appelé "ojdbc8.jar", qui est le pilote JDBC. Placez "ojdbc8.jar" autour de C:.

Pour rendre le pilote JDBC disponible pour les programmes Java, il doit être ajouté au chemin de construction, suivez donc les étapes ci-dessous.

    1. Faites un clic droit sur le projet Eclipse.
  1. [Propriétés] → [Chemin de construction Java] → [Bibliothèque]
    1. Cliquez sur [Add External Jar] et sélectionnez le fichier ojdbc8.jar de C:.
  2. Cliquez sur [Appliquer et fermer].

Si vous appuyez sur Exécuter et qu'aucune exception ne se produit, le pilote JDBC a été chargé avec succès.

2-② ② Etablir une connexion avec SQL

Créez une méthode getConnection () dans la classe DriverManager pour établir une connexion à la base de données. Mettez à jour l'URL de connexion, le nom d'utilisateur et le mot de passe DB pour qu'ils pointent vers la base de données.

MessageDao.java


public class MessageDao {
  //Déclarer les variables nécessaires à la connexion
  private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
  private static final String JDBC_URL  = "jdbc:oracle:thin:@localhost:1521:ORCL";
  private static final String USER_ID   = "imuser";
  private static final String USER_PASS = "impass";

  MessageDao (){
        //Chargement du pilote JDBC
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

  public ArrayList<MessageDto> select() {
  ArrayList<MessageDto> list = new ArrayList<>();

    //Déclaration de classe de connexion
    Connection con = null;
    //Déclaration de classe de déclaration
    PreparedStatement ps = null;
    //Déclaration de la classe d'ensemble de résultats
    ResultSet rs = null;

    //Accéder à la base de données
    try {
      //Établissez une connexion avec la base de données.
      con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);

   }
  }
}
  

Qu'est-ce que la classe DriverManager? -Classe de gestionnaire de pilotes JDBC. Diverses fonctions pour accéder au pilote JDBC et utiliser le SGBDR sont fournies. Si la méthode getConnection se connecte au SGBDR et que la connexion réussit, un objet Connection avec des informations sur la connexion DB est renvoyé comme valeur de retour. La connexion est exécutée en spécifiant les informations de connexion au DB (DB de destination de connexion, ID utilisateur, mot de passe) dans l'argument.

Une boîte qui sera utilisée plus tard pour stocker les résultats extraits de SQL, ArrayList list = new ArrayList<>(); Créez une zone vide avec MessageD pour taper ArrayList comme liste.

Comme nous avons besoin d'un DTO pour définir les données, créez une classe MessageDto.java afin que les données puissent être définies. 2-③ ③ Envoyer une instruction SQL Demandez à RDB d'exécuter l'instruction SQL avec la méthode executeQuery ou la méthode executeUpdate de l'objet de type Statement.

MessageDao.java


public class MessageDao {
  //Déclarer les variables nécessaires à la connexion
  private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
  private static final String JDBC_URL  = "jdbc:oracle:thin:@localhost:1521:ORCL";
  private static final String USER_ID   = "imuser";
  private static final String USER_PASS = "impass";

  MessageDao (){
        //Chargement du pilote JDBC
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

  public int insert(MessageDto dto) {

    //Déclaration de classe de connexion
    Connection con = null;
    //Déclaration de classe de déclaration
    PreparedStatement ps = null;
    //Variable de traitement du résultat (nombre de cas)
    int result = 0;
    //Accéder à la base de données
    try {
      //Établissez une connexion avec la base de données.
      con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);

//Génération d'instructions SQL (instruction SELECT)
   StringBuilder builder = new StringBuilder();
      //Instruction SQL SELECT*Obtenez tous les cas avec
      builder.append("SELECT *");
      builder.append("FROM ");
      builder.append("  MESSAGE_BOARD ");
      builder.append("ORDER BY ");
      builder.append("  ID DESC ");

      //Stocker l'instruction SQL dans la classe d'instructions
      ps = con.prepareStatement(builder.toString());

   }
  }
}
  

Le générateur de type StringBuilder est déclaré en tant que variable car la méthode append joint les chaînes. Vous pouvez également combiner des chaînes avec l'opérateur "+", mais comme la vitesse de traitement du programme sera plus rapide si vous utilisez la méthode append de StringBuilder, vous déclarez une variable de type StringBuilder et les combinez à l'aide de la méthode append. Je vais.

2-④ ④ Acquisition du résultat de l'exécution

Obtient les données du résultat de l'extraction de l'instruction SELECT envoyée à l'aide de l'objet ResultSet.

MessageDao.java


public class MessageDao {
  //Déclarer les variables nécessaires à la connexion
  private static final String DRIVER_NAME = "oracle.jdbc.driver.OracleDriver";
  private static final String JDBC_URL  = "jdbc:oracle:thin:@localhost:1521:ORCL";
  private static final String USER_ID   = "imuser";
  private static final String USER_PASS = "impass";

  MessageDao (){
        //Chargement du pilote JDBC
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

  public int insert(MessageDto dto) {

    //Déclaration de classe de connexion
    Connection con = null;
    //Déclaration de classe de déclaration
    PreparedStatement ps = null;
    //Variable de traitement du résultat (nombre de cas)
    int result = 0;
    //Accéder à la base de données
    try {
      //Établissez une connexion avec la base de données.
      con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);

//Génération d'instructions SQL (instruction SELECT)
   StringBuilder builder = new StringBuilder();
      //Instruction SQL SELECT*Obtenez tous les cas avec
      builder.append("SELECT *");
      builder.append("FROM ");
      builder.append("  MESSAGE_BOARD ");
      builder.append("ORDER BY ");
      builder.append("  ID DESC ");

      //Stocker l'instruction SQL dans la classe d'instructions
      ps = con.prepareStatement(builder.toString());

      //Exécuter SQL et stocker le résultat de l'acquisition dans le jeu de résultats (rs)
      rs = ps.executeQuery();

   while (rs.next()) {
       //Instanciez Dto pour stocker les résultats d'acquisition
       MessageDto dto = new MessageDto();
       //Stocker le résultat de l'acquisition dans dto
       dto.setId       (rs.getInt("id"));
       dto.setName     (rs.getString("name"));
       dto.setMessage  (rs.getString("message"));
       dto.setCreatedAt(rs.getTimestamp("created_at"));
       //Remplissez la liste avec les données d'un enregistrement stocké dans Dto
       list.add(dto);
     }


   }
  }
}
  

L'objet ResultSet est reçu comme valeur de retour de la méthode executeQuery de la classe Statement. C'est un objet qui peut être utilisé et les données du résultat de l'extraction de l'instruction SELECT envoyée sont stockées dans rs. Le résultat d'exécution reçu de SQL peut être mis en boucle et extrait un enregistrement à la fois. Une fois le réglage terminé, ajoutez la valeur définie dans la liste vide générée précédemment.

2-⑤ ⑤ Déconnecter

Puisqu'il est nécessaire de se déconnecter explicitement lorsque l'accès à la base de données est terminé, utilisez la méthode close pour chacun des objets Connection, Statement et ResultSet pour déconnecter (fermer).

MessageDao.java



public ArrayList<MessageDto> select() {

    ArrayList<MessageDto> list = new ArrayList<>();

    //Déclaration de classe de connexion
    Connection con = null;
    //Déclaration de classe de déclaration
    PreparedStatement ps = null;
    //Déclaration de la classe d'ensemble de résultats
    ResultSet rs = null;

    //Accéder à la base de données
    try {
      //Connectez-vous à la base de données
      con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);

      StringBuilder builder = new StringBuilder();
      builder.append("SELECT ");
      builder.append("   id ");
      builder.append("  ,name ");
      builder.append("  ,message ");
      builder.append("  ,created_at ");
      builder.append("FROM ");
      builder.append("  message_board ");
      builder.append("ORDER BY ");
      builder.append("  ID DESC ");
      //Stocker l'instruction SQL dans la classe d'instructions
      ps = con.prepareStatement(builder.toString());
      //Exécuter SQL et stocker le résultat de l'acquisition dans le jeu de résultats
      rs = ps.executeQuery();
      //Extraire les données un enregistrement à la fois de l'ensemble de résultats
      while (rs.next()) {
        //Instanciez Dto pour stocker les résultats d'acquisition
        MessageDto dto = new MessageDto();
        //Stocker le résultat de l'acquisition dans Dto
        dto.setId       (rs.getInt("id"));
        dto.setName     (rs.getString("name"));
        dto.setMessage  (rs.getString("message"));
        dto.setCreatedAt(rs.getTimestamp("created_at"));
        //Remplissez la liste avec les données d'un enregistrement stocké dans Dto
        list.add(dto);
      }

    } catch (SQLException e) {
      e.printStackTrace();
    } finally {
      try {
        if (rs != null) {
          rs.close();
        }
        if (ps != null) {
          ps.close();
        }
        if (con != null) {
          con.close();
        }
      } catch (SQLException e) {
        e.printStackTrace();
      }
    }
    //Renvoyer le résultat de l'acquisition à l'appelant
    return list;
  }
  

Ceci termine l'implémentation de JDBC. L'ajout, la mise à jour et la suppression de SQL modifient un peu la façon d'écrire les connexions, je vais donc résumer à ce sujet et le modèle JDBC. J'espère que cela aidera ceux qui implémenteront JDBC à l'avenir.

Les références

・ Https://docs.oracle.com/cd/E96517_01/tdpjd/creating-java-bean-implementation-jdbc-connection.html ・ Https://data.wingarc.com/what-is-api-16084

Recommended Posts

[À propos de JDBC qui connecte Java et SQL]
Ceci et cela à propos de Base64 (Java)
Mappeur de connexion JDBC qui mange du SQL et renvoie des beans
[Java] À propos de String et StringBuilder
À propos du package Java et de l'importation
À propos des méthodes Java statiques et non statiques
À propos de Biocontainers fastqc et Java
[Java débutant] À propos de l'abstraction et de l'interface
Utilisez JDBC avec Java et Scala.
[Java] Relation entre H2DB et JDBC
A propos des types primitifs et des types de référence Java
Coopération entre Java et Derby en utilisant JDBC (en utilisant NetBeans)
[Java] Proxy pour la journalisation des résultats SQL et SQL
[Java] À propos des fonctionnalités de Java 12
[Java] À propos des tableaux
À propos des types de données Java (en particulier des types primitifs) et des littéraux
Quelque chose à propos de java
Où est Java
Interface [Java]
À propos de la classe Java
Java et JavaScript
À propos des tableaux Java
XXE et Java
À propos de l'héritage Java
À propos de l'interface, interface java
À propos de Java Var
À propos de Java Literal
À propos des commandes Java
[Java] [SQL Server] Se connecter à SQL Server 2017 local à l'aide de JDBC pour SQL Server
[Java] À propos de Objects.equals () et examen de la comparaison de chaînes (== et égal à)
A propos du type de données de base Java et de la mémoire du type de référence
Ceci et cela pour éditer ini en Java. : inieditor-java
[Java Silver] (Gestion des exceptions) À propos des instructions try-catch-finally et try-with-resource
À propos des setters et des getters Java. <Différence par rapport à l'orientation de l'objet>
À propos de la sortie du journal Java
À propos de l'interface fonctionnelle Java
À propos de la division de classe (Java)
À propos de [Java] [StreamAPI] allMatch ()
Getter et Setter (Java)
[Java] Thread et exécutable
Java vrai et faux
À propos de Bean et DI
À propos des classes et des instances
[Java] Comparaison des chaînes de caractères et && et ||
À propos de la liaison de méthode Java
[Java] À propos des classes anonymes
A propos des méthodes de fractionnement (Java)
À propos de gets et gets.chomp
A propos de la liste des baies Java
À propos du polymorphisme Java Super ()
À propos de l'héritage (Java Silver)
À propos de la redirection et du transfert
À propos de la classe Java String
Java - Sérialisation et désérialisation
[Java] Arguments et paramètres
À propos des modificateurs d'accès Java
À propos de l'encapsulation et de l'héritage
À propos des expressions Java lambda
timedatectl et Java TimeZone