Herstellen einer Verbindung zu einer Datenbank mit Java (Teil 1) Möglicherweise die grundlegende Methode

Wie stelle ich mit Java eine Verbindung zu einer Datenbank her?

In Java-Code besteht die Methode, die häufig als grundlegende Methode zur Verwendung ohne Abhängigkeit von externen Bibliotheken erscheint, darin, ein System namens JDBC zu verwenden. Dies wird als Java-Standard vorbereitet, und beim Herstellen einer Verbindung zu einer tatsächlichen Datenbank wird auch eine Bibliothek verwendet, die als Connector bezeichnet wird.

Obwohl es zusammen verwendet wird, kann der für die Verbindung erforderliche Code grundsätzlich im Rahmen von JDBC geschrieben werden. Wenn Sie also mehrere Konnektoren vorbereiten, können Sie die Datenbanksysteme relativ einfach wechseln.

Schreiben wir zunächst den Code, wenn Sie Derby verwenden, das standardmäßig mit dem Java Development Kit (JDK) geliefert wird. Hier verwenden wir Derby, das standardmäßig mit dem JDK geliefert wird. Stellen Sie sicher, dass Sie die Derby-Bibliothek zu Ihrem Projekt hinzufügen. Bitte verwenden Sie auch "Lassen Sie uns Derby in der Benutzerbibliothek zusammenstellen" als Referenzmaterial.

Grundcode

Lassen Sie uns nun den Basiscode erhalten. Verlassen Sie die Entwicklungsumgebung vorerst als Eclipse. Lassen Sie uns ein geeignetes Projekt erstellen und Sample1 als Klasse verwenden.

/**
 *Beispiel für eine Datenbankverbindung(Teil 1:Anweisungsmethode)
 * 
 * @author Sato Daisuke
 */

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Sample1 {
    public static void main(String[] args) throws SQLException {
        // (1)Bereiten Sie einen URI für die Verbindung vor(Benutzer der Authentifizierungsanweisung, falls erforderlich/Passwort hinzufügen)
        String uri = "jdbc:derby:memory:sample;create=true";

        // (2)Stellen Sie eine Verbindung mit einer Methode der DriverManager-Klasse her
        Connection conn = DriverManager.getConnection(uri);

        // (3)Erstellen einer Instanz zum Senden von SQL
        Statement st = conn.createStatement();

        // (4)SQL-Übertragung
        st.executeUpdate("create table sample(id integer primary key)");
        Long start = System.currentTimeMillis();
        Long delta = start;

        //Vorerst 10.000 Loops
        for (int i = 0; i < 10000; i++) {
            st.executeUpdate("insert into sample values(" + i + ")");

            //Geteilte Berechnung
            if (i % 1000 == 0) {
                Long now = System.currentTimeMillis();
                Long split = now - delta;
                System.out.println("" + i + ": " + split + "ms.");
                delta = now;
            }
        }
        Long end = System.currentTimeMillis();
        System.out.println("Benötigte Zeit: " + (end - start) + "ms.");

        // (5)Aufräumen(Erfolgreicher Abschluss der Instanz)
        st.close();
        conn.close();
    }
}

Lassen Sie es uns auf den Punkt bringen.

Vorbereitung der Verbindungszeichenfolge

JDBC erschwert die Abhängigkeit von einer bestimmten Datenbank, Sie können jedoch nur dann eine Verbindung herstellen, wenn Sie wissen, zu welchem Datenbanksystem eine Verbindung hergestellt werden soll. Daher wird eine Zeichenfolge für die Verbindung erstellt (hier wird dies als "Verbindungszeichenfolge" bezeichnet), und die Verbindungsmethode wird durch das Symbol erfasst, das dem darin enthaltenen Konnektor entspricht.

        // (1)Bereiten Sie einen URI für die Verbindung vor(Benutzer der Authentifizierungsanweisung, falls erforderlich/Passwort hinzufügen)
        String uri = "jdbc:derby:memory:sample;create=true";
  1. Der Teil jdbc: ist fest, da es sich um eine Zeichenfolge handelt, die angibt, dass es sich um JDBC handelt.
  2. Der Derby-Teil ist der Name des Connectors. Wenn der Connector von JDBC erkannt wird, wird der "Name" jedes Connectors registriert. Sie müssen ihn also vergleichen, um den Connector auszuwählen, zu dem eine Verbindung hergestellt werden soll.
  3. Der folgende Teil (im obigen Code nach "Speicher") ist ein Code, der vom Anschluss abhängt.

Im Fall von Derby kann ein Bibliothekstyp, der sich der eingebetteten Verwendung bewusst ist, in dieser Form geschrieben werden. Im Fall des Client / Server-Typs (C / S) wird dies hingegen wie eine URL geschrieben. Zum Beispiel "jdbc: derby: // hogeserver / fuga". In beiden Fällen ist eine Speicherdatenbank verfügbar, und durch Eingabe des Schlüsselworts "Speicher" wird eine temporäre Datenbank im Speicher anstatt im Speicher erstellt. In diesem Fall verschwindet es, wenn das System mit DB beendet wird (Programmbeendigung bei integriertem Typ, Serverbeendigung bei C / S usw.).

Im Fall von MySQL ist es im Grunde C / S, also im Format "jdbc: mysql: // hogeserver / fuga".

Verbindungsstatus abrufen

Stellen Sie nach dem Festlegen der Verbindungszeichenfolge tatsächlich eine Verbindung her. Es ist jedoch schwierig, die Verbindung vollständig auf der Benutzerseite zu schreiben, so dass es eine Existenz gibt, für die sie gehandelt werden muss, dh die "DriverManager" -Klasse. Lassen Sie uns diesen Kerl verbinden. Verwenden Sie die statische Methode getConnection (), um das Verhalten des wörtlichen ** Erhaltens ** Connection ** zu ermitteln.

// (2)Stellen Sie eine Verbindung mit einer Methode der DriverManager-Klasse her
Connection conn = DriverManager.getConnection(uri);

Die generierte Instanz ist eine "Verbindungs" -Klasse, wie der Methodenname andeutet. Fangen Sie sie daher mit einer Variablen dieser Klasse ab.

Beachten Sie, dass diese Methode einen Sendevorgang erstellt, wenn die Verbindung fehlschlägt. Als Gegenmaßnahme delegieren Sie es entweder mit der "Throws" -Deklaration an den Elternteil oder behandeln Sie es mit "try" ~ "catch". Der Beispielcode wird in "Würfen" geschrieben.

Erstellen einer Anweisung zum Senden von SQL

Sobald Sie eine Verbindung hergestellt haben, erstellen Sie eine sogenannte ** Anweisung **, um diese Verbindung mit SQL zu füllen.

// (3)Erstellen einer Instanz zum Senden von SQL
Statement st = conn.createStatement();

Für die verbundene Instanz (hier wird sie von der Variablen "conn" empfangen) fühlt es sich an wie "SQL an Sie senden und ein Fenster vorbereiten". Es ist eine Instanz einer Klasse namens "Statement". Diese Instanz kann wiederholt verwendet werden. Sobald Sie sie erstellt haben, werden Sie sie wahrscheinlich vorerst haben.

SQL senden

Wenn Sie die Anweisung erhalten können, können Sie die SQL-Anweisung hier übergeben und auswerten lassen. Derzeit wird die Methode "execute" verwendet, es gibt jedoch drei Typen. Sie sollten es entsprechend auswählen.

executeUpdate (SQL-Anweisung)

Es wird zum Senden von Update-SQL verwendet, es wird Update genannt, aber im Extremfall ist es möglicherweise besser, ** anders als SELECT ** zu sagen. Wenn es funktioniert, erhalten Sie einen Rückgabewert von ** wie viele Fälle verarbeitet wurden ** (ganzzahliger Wert).

`executeQuery (SQL-Anweisung)

Wird zum Senden von SQL verwendet, um die Ergebnisse in Form einer Tabelle abzurufen. Es geht um eine stumpfe SELECT-Anweisung. Wenn es funktioniert, können Sie die Tabelle erhalten. Diese Tabelle ist eine Instanz einer Klasse namens "ResultSet", aber das ist eine andere Sache.

execute (SQL-Anweisung)

Bei den beiden oben genannten Methoden war es erforderlich, den SQL-Typ zu berücksichtigen und ordnungsgemäß zu verwenden. Dies ist jedoch die Methode, die von einer Person mit dem Namen ** Solch ein Problem ** verwendet wird. Es scheint einfach zu bedienen zu sein, aber es wird wahrscheinlich nicht sehr einfach sein, da Sie abhängig von der Art der Abfrage (ob es sich um ein Update-System handelt oder nicht) eine andere Methode zur Ergebniserfassung anwenden müssen.

Tatsächlicher Gebrauch

Da hier das Update-System verwendet wird, wird "executeUpdate ()" verwendet.

// (4)SQL-Übertragung
st.executeUpdate("create table sample(id integer primary key)");
...(Unterlassung)...
st.executeUpdate("insert into sample values(" + i + ")");

Der vorherige Code sendet eine Abfrage zum Erstellen einer Tabelle. Der Rückgabewert (numerischer Wert) ist Null, da die Tabelle tatsächlich nicht geändert wird. In letzterem Fall fügen wir Werte in die Tabelle ein, aber wir erstellen und senden Zeichenfolgen im laufenden Betrieb. Die Vor- und Nachteile dieses Gesetzes werden an anderer Stelle behandelt.

Beendigung der Nutzung, Freigabe

Am Ende der Verwendung ist es besser, es gemäß dem richtigen Verfahren zu schließen. Möglicherweise werden Auslassungen verarbeitet, daher versuchen wir, diese ordnungsgemäß zu behandeln und mit dem richtigen Verfahren abzuschließen.

// (5)Aufräumen(Erfolgreicher Abschluss der Instanz)
st.close();
conn.close();

Im Fall von Java gibt es keinen klaren Standard dafür, dass das Objekt beim Verlassen des Blocks verschwindet (ein subtiler Schrödinger-Zustand, ob es lebt oder tot ist, bis es durch Müll gesammelt wird), sodass Sie keinen Destruktor erwarten können. Stellen Sie sicher, dass Sie den Beendigungsprozess ordnungsgemäß schreiben.

Wenn ich es laufen lasse

Wenn ich versuche, diesen Code auszuführen, erhalte ich zwei Fälle.

Wenn normal ausgeführt

Wenn es normal funktioniert, wird die Ausgabe so sein.

0: 38ms.
1000: 1142ms.
2000: 892ms.
3000: 748ms.
4000: 634ms.
5000: 560ms.
6000: 595ms.
7000: 667ms.
8000: 681ms.
9000: 537ms.

Benötigte Zeit: 7040ms.

Es ist möglich, alle 1000 Mal Runden zu fahren. Natürlich ändert sich dies je nach Maschinenleistung erheblich.

Wenn es nicht normal ausgeführt werden kann

Wenn Sie Tippfehler weglassen, tritt dieser Fehler normalerweise einmal auf.

Exception in thread "main" java.sql.SQLException: No suitable driver found 
                                          for jdbc:derby:memory:sample;create=true
	at java.sql.DriverManager.getConnection(DriverManager.java:689)
	at java.sql.DriverManager.getConnection(DriverManager.java:270)
	at dbsample1.Sample1.main(Sample1.java:20)

Der Fehler lautet "Kein geeigneter Treiber gefunden". Ein Treiber ist ein Konnektor. Da das Lesen des Connectors zur Laufzeit erfolgt, ist es grundsätzlich unmöglich, ihn vor der Ausführung zu überprüfen. Der Connector wird im JAR-Format (Java Class Archive) verteilt, und der Laufzeitklassenpfad muss das Archiv enthalten.

Wenn Sie dies in Eclipse tun, ist es besser, eine Derby-Bibliothek (Benutzerbibliothek) zu erstellen. Wenn Sie es erstellen, Ihrem Erstellungspfad hinzufügen und erneut ausführen, wird es wahrscheinlich funktionieren.

Gleiches gilt bei Verwendung von MySQL. Zu diesem Zeitpunkt ist es einfacher, mit der Benutzerbibliothek zu arbeiten.

Recommended Posts

Herstellen einer Verbindung zu einer Datenbank mit Java (Teil 1) Möglicherweise die grundlegende Methode
Versuchen Sie, mit JDK6 (Java) + JDBC OCI-Treiber (Typ 2) eine Verbindung zur autonomen Datenbank herzustellen.
Erstellen Sie eine Methode, um den Steuersatz in Java zurückzugeben
Java mit Ramen lernen [Teil 1]
Ersetzen Sie durch einen Wert entsprechend der Übereinstimmung mit einem regulären Java-Ausdruck
[Java] Ich habe versucht, mit der Grabmethode ein Labyrinth zu erstellen ♪
[Java] Fassen Sie zusammen, wie Sie mit der Methode equals vergleichen können
Parallelitätsmethode in Java mit grundlegendem Beispiel
[Java] So suchen Sie mit der Methode includes nach Werten in einem Array (oder einer Liste)
Ich habe versucht, eine Standardauthentifizierung mit Java durchzuführen
[Rails] Rails neu, um eine Datenbank mit PostgreSQL zu erstellen
Geben Sie ein Suffix für die Methode an
Geben Sie ein Suffix für Methode 2 heraus
Verwendung der replace () -Methode (Java Silver)
[Java / PostgreSQL] Verbinden Sie die WEB-Anwendung mit der Datenbank
Ich habe versucht, den Block mit Java zu brechen (1)
Der Weg zum Erstellen eines Webdienstes (Teil 1)
Java-Ingenieure im Vergleich zum Erlernen der grundlegenden Grammatik von Ruby jetzt Teil 1 (Basic, Variablen)
Bis Sie ein Java-Programm mit dem für Windows lokalen AWS SDK ausführen
Java-Ingenieure vergleichen nun, um die grundlegende Grammatik von Ruby Teil 2 (Klassen, Methoden) zu lernen.
3. Erstellen Sie eine Datenbank für den Zugriff über das Webmodul
Senden Sie einen Job an AWS Batch mit Java (Eclipse)
[Anfänger] Erstellen Sie ein wettbewerbsfähiges Spiel mit grundlegenden Java-Kenntnissen
Rufen Sie eine Methode mit Kotlins Rückrufblock von Java aus auf
Speichern von Dateien mit der angegebenen Erweiterung unter dem in Java angegebenen Verzeichnis in der Liste
HTTPS-Verbindung mit Java zum selbstsignierten Zertifikatsserver
Verwenden der Datenbank (SQL Server 2014) aus einem Java-Programm 2018/01/04
Versuchen Sie, mit Java eine Verbindung zu AzureCosmosDB Emulator for Docker herzustellen
[Java] Grundlegende Methodenhinweise
[Java] Schneiden Sie einen Teil der Zeichenfolge mit Matcher und regulären Ausdrücken aus
[Java] So unterbrechen Sie eine Zeile mit StringBuilder
Ersetzen Sie nur einen Teil des URL-Hosts durch Java
Zusammenfassung der Verwendung des im IE festgelegten Proxy-Sets bei der Verbindung mit Java
Stellen Sie lokal entwickelte Java-Anwendungen mit Cloud Toolkit auf Alibaba Cloud ECS-Instanzen bereit
Ich möchte mit Java8 StreamAPI redu () einen anderen Typ als das Eingabeelement zurückgeben.
So reduzieren Sie die Programmlast ein wenig, wenn Sie Zeichen mit JAVA kombinieren
[Schienen] Was tun, wenn die Ansicht zusammenbricht, wenn eine Nachricht mit der Fehlermethode angezeigt wird?
So erhalten Sie den Namen einer Klasse / Methode, die in Java ausgeführt wird
So machen Sie einen Screenshot mit dem Android Studio-Emulator
Ich habe versucht, mit Chocolatey eine Java8-Entwicklungsumgebung zu erstellen
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 1
Ich habe versucht, eine Java EE-Anwendung mit OpenShift zu modernisieren.
[JDBC] Ich habe versucht, von Java aus auf die SQLite3-Datenbank zuzugreifen.
[Anfänger] Versuchen Sie, mit Java ein einfaches RPG-Spiel zu erstellen ①
Ich möchte eine Liste mit Kotlin und Java erstellen!
Ich möchte eine Methode aufrufen und die Nummer zählen
Ich möchte eine Funktion mit Kotlin und Java erstellen!
Selbst in Java möchte ich true mit == 1 && a == 2 && a == 3 ausgeben
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 2
Informationen zum Verhalten beim Erstellen einer Dateizuordnung mit Java
Ein Memorandum, um den juckenden Ort für Java Gold zu erreichen
Ein Memo zum Starten der Java-Programmierung mit VS Code (Version 2020-04)
Stellen Sie sicher, dass Sie das Java compareTo-Ergebnis mit 0 vergleichen
Ich habe versucht, eine PDF-Datei mit Java part2 zu verarbeiten
Tutorial zum Erstellen eines Blogs mit Rails für Anfänger Teil 0
Erstmaliges Modellieren von Digimon mit DDD Teil 1
Grundlegende Authentifizierung mit Java 11 HttpClient
Java zum Spielen mit Function
Ausgabe über die Methode Teil 1