Suche…


Syntax

  • DB_URL = "jdbc: DBMS: // DB_HOST: DB_PORT / DB_NAME"

  • DBMS: Data Base Driver Manager, dies kann ein beliebiges DBMS sein (mysql, oracle, postgresql, sqlite, ...), zum Beispiel mysql: "com.mysql.jdbc.Driver"

  • DB_HOST: Ihr Datenbank-Basishost, die IP-Adresse Ihres Datenbankbeispiels: 10.6.0.1, der Standardwert ist localhost oder 127.0.0.1

  • DB_PORT: Datenbankport, jedes DBMS hat einen defeaut-Port, zum Beispiel mysql = 3306, postegesql = 5432

  • DB_NAME: Der Name Ihrer Datenbank

  • Um eine Verbindung herzustellen, erhalten Sie einen Verweis auf das Klassenobjekt.

  • Class.forName (DRIVER);

  • Und um eine Verbindung zur Datenbank herzustellen, müssen Sie eine Verbindung herstellen

  • java.sql.Connection con = DriverManager.getConnection (DB_URL, DB_USER_NAME, DB_PASSWORD);

  • DB_USER_NAME: der Benutzername Ihrer Datenbank

  • DB_PASSWORD: das Passwort Ihrer Datenbank

Einführung (SQL)

Seit Java 6 ist der Zugriff auf eine SQL-basierte Datenbank in Java die Verwendung der JDBC-API (Java DataBase Connectivity).

Diese API ist in zwei Paketen erhältlich: java.sql und javax.sql .

JDBC definiert Datenbankinteraktionen in Bezug auf Connections und Drivers .

Ein Driver interagiert mit der Datenbank und stellt eine vereinfachte Schnittstelle zum Öffnen und Verwalten von Verbindungen bereit. Die meisten Datenbankservervarianten (PostgreSQL, MySQl usw.) verfügen über eigene Drivers , die das Setup, den Abbau und die Übersetzung für diesen Server durchführen. Drivers wird normalerweise nicht direkt zugegriffen. DriverManager wird stattdessen die vom DriverManager Objekt bereitgestellte Schnittstelle verwendet.

Das DriverManager Objekt ist im Wesentlichen der Kern von JDBC. Es bietet eine (meistens) datenbankunabhängige Schnittstelle zum Erstellen von Connections . Bei älteren Versionen der JDBC-API mussten datenbankspezifische Drivers geladen werden, bevor DeviceManager eine Verbindung zu diesem Datenbanktyp herstellen konnte.

Eine Connection ist, wie der Name schon sagt, eine Darstellung einer offenen Verbindung zur Datenbank. Connections sind datenbankunabhängig und werden vom DriverManager erstellt und bereitgestellt. Sie bieten eine Reihe von "Shortcut" -Methoden für gängige Abfragetypen sowie eine unformatierte SQL-Schnittstelle.

Verwendung der Verbindung (und Anweisungen)

Sobald wir die Connection , verwenden wir sie hauptsächlich zum Erstellen von Statement . Statements repräsentieren eine einzelne SQL-Transaktion. Sie werden zum Ausführen einer Abfrage und zum Abrufen der Ergebnisse (falls vorhanden) verwendet. Schauen wir uns einige Beispiele an:

public void useConnection() throws SQLException{


    Connection conn = getConnection();

    //We can use our Connection to create Statements
    Statement state = conn.getStatement();

    //Statements are most useful for static, "one-off" queries
    
    String query = "SELECT * FROM mainTable";
    boolean sucess = state.execute(query);
    
    //The execute method does exactly that; it executes the provided SQL statement, and returns true if the execution provided results (i.e. was a SELECT) and false otherwise.

    ResultSet results = state.getResultSet();
    
    //The ResultSet object represents the results, if any, of an SQL statement.
    //In this case, the ResultSet contains the return value from our query statement.
    //A later example will examine ResultSets in more detail.

    ResultSet newResults = state.executeQuery(query)
    
    //The executeQuery method is a 'shortcut' method. It combines the execute and getResultSet methods into a single step.
    //Note that the provided SQL query must be able to return results; typically, it is a single static SELECT statement.
    //There are a number of similar 'shortcut' methods provided by the Statement interface, including executeUpdate and executeBatch

    //Statements, while useful, are not always the best choice. 
    
    String newQuery = "SELECT * FROM mainTable WHERE id=?";
    PreparedStatement prepStatement = conn.prepareStatement(newQuery);

    //PreparedStatements are the prefed alternative for variable statements, especially ones that are going to be executed multiple times

    for(int id:this.ids){

        prepStatement.setInt(1,id);
        //PreparedStatements allow you to set bind variables with a wide variety of set methods.
        //The first argument to any of the various set methods is the index of the bind variable you want to set. Note that this starts from 1, not 0. 

        ResultSet tempResults = prepStatement.executeQuery()
        //Just like Statements, PreparedStatements have a couple of shortcut methods. 
        //Unlike Statements, PreparedStatements do not not take a query string as an argument to any of their execute methods.
        //The statement that is executed is always the one passed to the Connector.prepareStatement call that created the PreparedStatement
    }

}

Erstellen einer Verbindung mit java.sql.DriverManager

Für die Verbindung mit java.sql.DriverManager benötigen Sie eine JDBC-URL, um eine Verbindung zu Ihrer Datenbank java.sql.DriverManager . JDBC-URLs sind datenbankspezifisch, haben jedoch alle die Form

jdbc:<subprotocol>:<subname>

Dabei bezeichnet <subprotocol> den Treiber oder die Datenbank (z. B. postgresql , mysql , firebirdsql usw.) und <subname> ist subprotokollspezifisch.

Sie müssen die Dokumentation Ihrer Datenbank und Ihres JDBC-Treibers auf das spezifische URL-Subprotokoll und das Format für Ihren Treiber überprüfen.

Ein einfaches Beispiel zum Erstellen einer Verbindung zu einer Datenbank mit der URL jdbc:somedb://localhost/foobar :

try (Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar", "anna", "supersecretpassword")) {
    // do something with connection
}

Wir verwenden hier eine Try-With-Ressource , so dass die Verbindung automatisch geschlossen wird, sobald wir damit fertig sind, selbst wenn Ausnahmen auftreten.

4,0

Auf Java 6 (JDBC 4.0) und früheren Versionen sind Try-With-Ressourcen nicht verfügbar. In diesen Versionen müssen Sie einen finally Block verwenden, um eine Verbindung explizit zu schließen:

Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar", "anna", "supersecretpassword");
try {
    // do something with connection
} finally {
    // explicitly close connection
    connection.close();
}
4,0

Mit JDBC 4.0 (Java 6) wurde das Konzept des automatischen Treiberladens eingeführt. Wenn Sie Java 5 oder eine frühere Version oder einen älteren JDBC-Treiber verwenden, der keine JDBC 4-Unterstützung implementiert, müssen Sie die Treiber explizit laden:

Class.forName("org.example.somedb.jdbc.Driver");

Diese Zeile muss (mindestens) einmal in Ihrem Programm vorhanden sein, bevor eine Verbindung hergestellt wird.

Selbst in Java 6 und höher mit JDBC 4.0 kann es erforderlich sein, einen Treiber explizit zu laden: beispielsweise in Webanwendungen, wenn der Treiber nicht in den Container, sondern als Teil der Webanwendung geladen wird.

Alternativ können Sie auch ein Properties für die Verbindung angeben:

Properties props = new Properties();
props.setProperty("user", "anna");
props.setProperty("password", "supersecretpassword");
// other, database specific, properties
try (Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar", props)) {
    // do something with connection
}

Oder auch ohne Eigenschaften, zum Beispiel, wenn die Datenbank keinen Benutzernamen und kein Passwort benötigt:

try (Connection connection = DriverManager.getConnection(
        "jdbc:somedb://localhost/foobar")) {
    // do something with connection
}

Verbindung zu MySQL herstellen

Um sich mit MySQL zu verbinden, müssen Sie den MySQL Connector / J-Treiber verwenden. Sie können es von http://dev.mysql.com/downloads/connector/j/ herunterladen oder Sie können Maven verwenden:

<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

Die grundlegende JDBC-URL für MySQL lautet:

jdbc:mysql://<hostname>[:<port>]/<database>[?<propertyName>=<propertyValue>[&<propertyName>=<propertyValue>]...]

Woher:

Schlüssel Beschreibung Beispiel
<hostname> Hostname des MySQL-Servers localhost
<port> Port des MySQL-Servers (optional, Standard: 3306) 3306
<database> Name der Datenbank foobar
<propertyName> Name einer Verbindungseigenschaft useCompression
<propertyValue> Wert einer Verbindungseigenschaft true

Die unterstützte URL ist komplexer als oben angegeben, dies reicht jedoch für die meisten "normalen" Anforderungen aus.

Verbinden Sie sich mit:

try (Connection connection = DriverManager.getConnection(
        "jdbc:mysql://localhost/foobardb", "peter", "nicepassword")) {
    // do something with connection
}
4,0

Für ältere Java / JDBC-Versionen:

4,0
// Load the MySQL Connector/J driver
Class.forName("com.mysql.jdbc.Driver");
Connection connection = DriverManager.getConnection(
        "jdbc:mysql://localhost/foobardb", "peter", "nicepassword");
try {
    // do something with connection
} finally {
  // explicitly close connection
  connection.close();
}

Verbindung zu einer Microsoft Access-Datenbank mit UCanAccess

UCanAccess ist ein reiner Java- JDBC Treiber, mit dem Access-Datenbanken ohne ODBC gelesen und darin geschrieben werden können. Es verwendet zwei andere Pakete, Jackcess und HSQLDB , um diese Aufgaben auszuführen.

Nach dem Einrichten * können wir mit Daten in .accdb- und .mdb-Dateien mit folgendem Code arbeiten:

import java.sql.*;

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://C:/__tmp/test/zzz.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT [LastName] FROM [Clients]");
while (rs.next()) {
    System.out.println(rs.getString(1));
}

* Weitere Einzelheiten finden Sie in der folgenden Frage:

Bearbeiten einer Access-Datenbank von Java ohne ODBC

Oracle JDBC-Verbindung

Treiber:

( Hinweis: Der Treiber ist nicht in Maven Central enthalten!)

Initialisierung der Treiberklasse:

    Class.forName("oracle.jdbc.driver.OracleDriver");

Verbindungs-URL

Älteres Format mit SID

"jdbc:oracle:thin:@<hostname>:<port>:<SID>"

Neueres Format mit Dienstname

"jdbc:oracle:thin:@//<hostname>:<port>/<servicename>"

TNS-Namen wie Eintrag

"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCPS)(HOST=<hostname>)(PORT=<port>))"
    +"(CONNECT_DATA=(SERVICE_NAME=<servicename>)))"

RAC-Cluster-Verbindungszeichenfolge für Failover

"jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(LOAD_BALANCE=OFF)(FAILOVER=ON)"
    +"(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname1>)(PORT=<port1>))"
    +"(ADDRESS=(PROTOCOL=TCP)(HOST=<hostname2>)(PORT=<port2>)))"
    +"(CONNECT_DATA=SERVICE_NAME=<servicename>)(SERVER=DEDICATED)))"

Beispiel

connection = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "HR", "HRPASS");


Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow