[Über JDBC, das Java und SQL verbindet]

Einführung

Da es schwierig war, JDBC (Java Database Connectivity) zu implementieren, das Java und SQL verbindet, werde ich es als Memorandum belassen.

Entwicklungsumgebung

・ Betriebssystem  Windows10 ·Editor  Ecripse ・ Java  OpenJDK 8 ・ SQL  MySQL

1, was ist JDBC

JDBC (Java Database Connectivity) ist eine API zum Verbinden von Java und RD und zum Betrieb von Java aus. Sie können das JDBC-Konzept verwenden, um Daten von Java in SQL zu registrieren, zu aktualisieren und zu löschen sowie Daten aus SQL abzurufen. Es gibt verschiedene DB-Typen wie Oracle, MySQL, SQL Server usw., und die Methode zum Herstellen einer Verbindung zu jeder DB hängt vom DB-Typ ab. Es wird sich ändern, aber wenn Sie über JDBC eine Verbindung zu einer Datenbank herstellen, können Sie darauf zugreifen, ohne sich um die Individualität jeder Datenbank sorgen zu müssen.

Es gab einen leicht verständlichen Artikel wie die Geschichte von JDBC, also werde ich ihn veröffentlichen. https://data.wingarc.com/what-is-api-16084

2, Implementierung

Befolgen Sie zur Implementierung das folgende Verfahren, um JDBC zu implementieren. ① JDBC-Treiber wird geladen ② Herstellen einer Verbindung mit SQL ③ SQL-Anweisung senden ④ Erfassung des Ausführungsergebnisses ⑤ Trennen

2-① ① JDBC-Treiber wird geladen

Laden Sie den Treiber (erstellen Sie ein Class-Objekt im Speicher) mit der Class.forName-Methode.

MessageDao.java


public class MessageDao {
  //Deklarieren Sie die für die Verbindung benötigten Variablen
  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 (){
        //JDBC-Treiber wird geladen
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
}

Wenn Sie es in diesem Zustand ausführen, wird der Fehler java.lang.ClassNotFonudException angezeigt. So greifen Sie von einer Java-Anwendung auf die Datenbank zu Zunächst müssen Sie den vom Hersteller bereitgestellten RDBMS-spezifischen JDBC-Treiber abrufen. Darüber hinaus müssen Einstellungen vorgenommen werden, damit der erhaltene JDBC-Treiber aus Java-Programmen verwendet werden kann. Der JDBC-Treiber kann von der Oracle-Website heruntergeladen werden. https://www.oracle.com/technetwork/database/features/jdbc/jdbc-drivers-12c-download-1958347.htm

Nach Abschluss des Downloads befindet sich eine Datei mit dem Namen "ojdbc8.jar", bei der es sich um den JDBC-Treiber handelt. Platzieren Sie "ojdbc8.jar" um C :.

Um den JDBC-Treiber für Java-Programme verfügbar zu machen, muss er dem Erstellungspfad hinzugefügt werden. Führen Sie daher die folgenden Schritte aus.

    1. Klicken Sie mit der rechten Maustaste auf das Eclipse-Projekt.
  1. [Eigenschaften] → [Java Build Path] → [Bibliothek]
    1. Klicken Sie auf [External Jar hinzufügen] und wählen Sie die Datei ojdbc8.jar von C: aus.
  2. Klicken Sie auf [Übernehmen und schließen].

Wenn Sie auf Ausführen klicken und keine Ausnahme auftritt, wurde der JDBC-Treiber erfolgreich geladen.

2-② ② Herstellen einer Verbindung mit SQL

Erstellen Sie eine Methode getConnection () in der DriverManager-Klasse, um eine Verbindung zur Datenbank herzustellen. Aktualisieren Sie die Verbindungs-URL, den DB-Benutzernamen und das DB-Kennwort, um auf die Datenbank zu verweisen.

MessageDao.java


public class MessageDao {
  //Deklarieren Sie die für die Verbindung benötigten Variablen
  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 (){
        //JDBC-Treiber wird geladen
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

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

    //Verbindungsklassendeklaration
    Connection con = null;
    //Anweisungsklassendeklaration
    PreparedStatement ps = null;
    //Deklaration der Ergebnismengenklasse
    ResultSet rs = null;

    //Zugriff auf Datenbank
    try {
      //Stellen Sie eine Verbindung mit der Datenbank her.
      con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);

   }
  }
}
  

Was ist die DriverManager-Klasse? -JDBC-Treibermanagerklasse. Es stehen verschiedene Funktionen für den Zugriff auf den JDBC-Treiber und den Betrieb des RDBMS zur Verfügung. Wenn Sie mit der Methode getConnection eine Verbindung zu RDBMS herstellen und die Verbindung erfolgreich ist, wird ein Verbindungsobjekt mit Informationen zur DB-Verbindung als Rückgabewert zurückgegeben. Die Verbindung wird ausgeführt, indem die Verbindungsinformationen zur Datenbank (Verbindungsziel-Datenbank, Benutzer-ID, Kennwort) im Argument angegeben werden.

Ein Feld, das später zum Speichern der aus SQL extrahierten Ergebnisse verwendet wird. ArrayList list = new ArrayList<>(); Erstellen Sie ein leeres Feld mit MessageD, um ArrayList als Liste einzugeben.

Da zum Definieren der Daten ein DTO erforderlich ist, erstellen Sie eine MessageDto.java-Klasse, damit die Daten definiert werden können. 2-③ ③ SQL-Anweisung senden Bitten Sie RDB, die SQL-Anweisung mit der executeQuery-Methode oder der executeUpdate-Methode des Objekts vom Typ Statement auszuführen.

MessageDao.java


public class MessageDao {
  //Deklarieren Sie die für die Verbindung benötigten Variablen
  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 (){
        //JDBC-Treiber wird geladen
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

  public int insert(MessageDto dto) {

    //Verbindungsklassendeklaration
    Connection con = null;
    //Anweisungsklassendeklaration
    PreparedStatement ps = null;
    //Variable für das Verarbeitungsergebnis (Anzahl der Fälle)
    int result = 0;
    //Zugriff auf Datenbank
    try {
      //Stellen Sie eine Verbindung mit der Datenbank her.
      con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);

//Generierung von SQL-Anweisungen (SELECT-Anweisung)
   StringBuilder builder = new StringBuilder();
      //SQL-Anweisung SELECT*Holen Sie sich alle Fälle mit
      builder.append("SELECT *");
      builder.append("FROM ");
      builder.append("  MESSAGE_BOARD ");
      builder.append("ORDER BY ");
      builder.append("  ID DESC ");

      //Speichern Sie die SQL-Anweisung in der Anweisungsklasse
      ps = con.prepareStatement(builder.toString());

   }
  }
}
  

Der Builder für den StringBuilder-Typ wird als Variable deklariert, da die Append-Methode die Zeichenfolgen verbindet. Sie können Zeichenfolgen auch mit dem Operator "+" kombinieren. Da die Verarbeitungsgeschwindigkeit des Programms jedoch höher ist, wenn Sie die Append-Methode von StringBuilder verwenden, deklarieren Sie eine Variable vom Typ StringBuilder und kombinieren sie mit der Append-Methode. Ich werde.

2-④ ④ Erfassung des Ausführungsergebnisses

Ruft die Daten des Extraktionsergebnisses der SELECT-Anweisung ab, die mit dem ResultSet-Objekt gesendet wurde.

MessageDao.java


public class MessageDao {
  //Deklarieren Sie die für die Verbindung benötigten Variablen
  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 (){
        //JDBC-Treiber wird geladen
        try {
            Class.forName(DRIVER_NAME);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

  public int insert(MessageDto dto) {

    //Verbindungsklassendeklaration
    Connection con = null;
    //Anweisungsklassendeklaration
    PreparedStatement ps = null;
    //Variable für das Verarbeitungsergebnis (Anzahl der Fälle)
    int result = 0;
    //Zugriff auf Datenbank
    try {
      //Stellen Sie eine Verbindung mit der Datenbank her.
      con = DriverManager.getConnection(JDBC_URL, USER_ID, USER_PASS);

//Generierung von SQL-Anweisungen (SELECT-Anweisung)
   StringBuilder builder = new StringBuilder();
      //SQL-Anweisung SELECT*Holen Sie sich alle Fälle mit
      builder.append("SELECT *");
      builder.append("FROM ");
      builder.append("  MESSAGE_BOARD ");
      builder.append("ORDER BY ");
      builder.append("  ID DESC ");

      //Speichern Sie die SQL-Anweisung in der Anweisungsklasse
      ps = con.prepareStatement(builder.toString());

      //Führen Sie SQL aus und speichern Sie das Erfassungsergebnis in der Ergebnismenge (rs).
      rs = ps.executeQuery();

   while (rs.next()) {
       //Instanziieren Sie Dto, um die Erfassungsergebnisse zu speichern
       MessageDto dto = new MessageDto();
       //Speichern Sie das Erfassungsergebnis in dto
       dto.setId       (rs.getInt("id"));
       dto.setName     (rs.getString("name"));
       dto.setMessage  (rs.getString("message"));
       dto.setCreatedAt(rs.getTimestamp("created_at"));
       //Füllen Sie die Liste mit den Daten für einen in Dto gespeicherten Datensatz
       list.add(dto);
     }


   }
  }
}
  

Das ResultSet-Objekt wird als Rückgabewert der executeQuery-Methode der Statement-Klasse empfangen. Es ist ein Objekt, das verwendet werden kann, und die Daten des Extraktionsergebnisses der gesendeten SELECT-Anweisung werden in rs gespeichert. Das von SQL empfangene Ausführungsergebnis kann wiederholt und jeweils einzeln abgerufen werden. Fügen Sie nach Abschluss der Einstellung den Wert hinzu, der in der zuvor generierten leeren Liste festgelegt wurde.

2-⑤ ⑤ Trennen

Da die Verbindung explizit getrennt werden muss, wenn der Zugriff auf die Datenbank abgeschlossen ist, verwenden Sie die Methode close für jedes Verbindungsobjekt, Anweisungsobjekt und ResultSet-Objekt, um die Verbindung zu trennen (schließen).

MessageDao.java



public ArrayList<MessageDto> select() {

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

    //Verbindungsklassendeklaration
    Connection con = null;
    //Anweisungsklassendeklaration
    PreparedStatement ps = null;
    //Deklaration der Ergebnismengenklasse
    ResultSet rs = null;

    //Zugriff auf Datenbank
    try {
      //Stellen Sie eine Verbindung zur Datenbank her
      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 ");
      //Speichern Sie die SQL-Anweisung in der Anweisungsklasse
      ps = con.prepareStatement(builder.toString());
      //Führen Sie SQL aus und speichern Sie das Erfassungsergebnis in der Ergebnismenge
      rs = ps.executeQuery();
      //Extrahieren Sie die Daten einzeln aus der Ergebnismenge
      while (rs.next()) {
        //Instanziieren Sie Dto, um die Erfassungsergebnisse zu speichern
        MessageDto dto = new MessageDto();
        //Speichern Sie das Erfassungsergebnis in Dto
        dto.setId       (rs.getInt("id"));
        dto.setName     (rs.getString("name"));
        dto.setMessage  (rs.getString("message"));
        dto.setCreatedAt(rs.getTimestamp("created_at"));
        //Füllen Sie die Liste mit den Daten für einen in Dto gespeicherten Datensatz
        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();
      }
    }
    //Geben Sie das Erfassungsergebnis an den Anrufer zurück
    return list;
  }
  

Damit ist die Implementierung von JDBC abgeschlossen. Durch Hinzufügen, Aktualisieren und Löschen von SQL wird die Art und Weise, wie Verbindungen geschrieben werden, ein wenig geändert. Daher werde ich dies und die JDBC-Vorlage zusammenfassen. Ich hoffe, es wird denjenigen helfen, die JDBC in Zukunft implementieren.

Verweise

・ 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

[Über JDBC, das Java und SQL verbindet]
Dies und das über Base64 (Java)
JDBC-Verbindungs-Mapper, der SQL frisst und Beans zurückgibt
[Java] Über String und StringBuilder
Über Java-Paket und Import
Informationen zu statischen und nicht statischen Java-Methoden
Über Biocontainer fastqc und Java
[Java-Anfänger] Über Abstraktion und Schnittstelle
Verwenden Sie JDBC mit Java und Scala.
[Java] Beziehung zwischen H2DB und JDBC
Informationen zu primitiven Java-Typen und Referenztypen
Zusammenarbeit zwischen Java und Derby mit JDBC (mit NetBeans)
[Java] Proxy zum Protokollieren von SQL und SQL-Ergebnissen
[Java] Informationen zu Java 12-Funktionen
[Java] Über Arrays
Informationen zu Java-Datentypen (insbesondere primitiven Typen) und Literalen
Etwas über Java
Wo ist mit Java?
[Java] -Schnittstelle
Über die Java-Klasse
Java und JavaScript
Informationen zu Java-Arrays
XXE und Java
Über Java-Vererbung
Über Schnittstelle, Java-Schnittstelle
Über Java Var
Über Java Literal
Informationen zu Java-Befehlen
[Java] [SQL Server] Stellen Sie mit JDBC für SQL Server eine Verbindung zum lokalen SQL Server 2017 her
[Java] Über Objects.equals () und Überprüfung des String-Vergleichs (== und gleich)
Informationen zum Java-Grunddatentyp- und Referenztypspeicher
Dies und das zum Bearbeiten von ini in Java. : inieditor-java
[Java Silver] (Ausnahmebehandlung) Informationen zu den Anweisungen try-catch-finally und try-with-resource
Über Java-Setter und Getter. <Unterschied zur Objektorientierung>
Informationen zur Java-Protokollausgabe
Informationen zur Java-Funktionsschnittstelle
Über die Klassenteilung (Java)
Über [Java] [StreamAPI] allMatch ()
Getter und Setter (Java)
[Java] Thread und ausführbar
Java wahr und falsch
Über Bean und DI
Über Klassen und Instanzen
[Java] Vergleich von Zeichenketten und && und ||
Informationen zur Bindung von Java-Methoden
[Java] Über anonyme Klassen
Informationen zu Aufteilungsmethoden (Java)
Über bekommt und bekommt.chomp
Informationen zur Java-Array-Liste
Über Java-Polymorphismus super ()
Informationen zur Vererbung (Java Silver)
Über Weiterleiten und Weiterleiten
Informationen zur Java String-Klasse
Java - Serialisierung und Deserialisierung
[Java] Argumente und Parameter
Informationen zu Java-Zugriffsmodifikatoren
Über Kapselung und Vererbung
Über Java-Lambda-Ausdrücke
timedatectl und Java TimeZone