Recherche…


Syntaxe

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

  • SGBD: Gestionnaire de pilotes de base de données, cela peut être n'importe quel SGBD (mysql, oracle, postgresql, sqlite, ...), exemple de mysql: "com.mysql.jdbc.Driver"

  • DB_HOST: votre hôte de base de données, l'adresse IP de votre exemple de base de données: 10.6.0.1, la valeur par défaut est localhost ou 127.0.0.1

  • DB_PORT: Port de base de données, chaque SGBD a un port defeaut exemple mysql = 3306, postegesql = 5432

  • DB_NAME: le nom de votre base de données

  • Pour vous connecter, vous devez obtenir une référence à l'objet de classe,

  • Class.forName (DRIVER);

  • Et pour vous connecter à la base de données, vous devez créer une connexion

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

  • DB_USER_NAME: le nom d'utilisateur de votre base de données

  • DB_PASSWORD: le mot de passe de votre base de données

Introduction (SQL)

Depuis Java 6, la méthode recommandée pour accéder à une base de données SQL en Java consiste à utiliser l'API JDBC (Java DataBase Connectivity).

Cette API est disponible en deux versions: java.sql et javax.sql .

JDBC définit les interactions de base de données en termes de Connections et de Drivers .

Un Driver interagit avec la base de données et fournit une interface simplifiée pour l'ouverture et la gestion des connexions. La plupart des variétés de serveurs de bases de données (PostgreSQL, MySQl, etc.) ont leurs propres Drivers , qui gèrent la configuration, le démontage et la traduction spécifiques à ce serveur. Drivers sont généralement pas accessibles directement; au contraire, l'interface fournie par l'objet DriverManager est utilisée à la place.

L'objet DriverManager est essentiellement le noyau de JDBC. Il fournit une interface (principalement) indépendante de la base de données pour créer des Connections . Pour les anciennes versions de l'API JDBC, les Drivers spécifiques à la base de données devaient être chargés avant que DeviceManager puisse créer une connexion à ce type de base de données.

Une Connection est, comme son nom l'indique, une représentation d'une connexion ouverte à la base de données. Connections sont Connections base de données et sont créées et fournies par DriverManager . Ils fournissent un certain nombre de méthodes de raccourci pour les types de requêtes courants, ainsi qu'une interface SQL brute.

Utiliser la connexion (et instructions)

Une fois la Connection obtenue, nous l'utilisons principalement pour créer des objets Statement . Statements représentent une transaction SQL unique; ils sont utilisés pour exécuter une requête et récupérer les résultats (le cas échéant). Regardons quelques exemples:

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
    }

}

Création d'une connexion à l'aide de java.sql.DriverManager

Pour vous connecter à l'aide de java.sql.DriverManager vous avez besoin d'une URL JDBC pour vous connecter à votre base de données. Les URL JDBC sont spécifiques à la base de données, mais elles sont toutes de la forme

jdbc:<subprotocol>:<subname>

<subprotocol> identifie le pilote ou la base de données (par exemple, postgresql , mysql , firebirdsql , etc.) et <subname> est spécifique au sous-protocole.

Vous devez vérifier la documentation de votre base de données et du pilote JDBC pour connaître le sous-protocole et le format d'URL spécifiques à votre pilote.

Un exemple simple pour créer une connexion à une base de données avec l'url jdbc:somedb://localhost/foobar :

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

Nous utilisons un try-with-resources ici afin que la connexion soit automatiquement fermée lorsque nous en avons fini, même si des exceptions se produisent.

4.0

Sous Java 6 (JDBC 4.0) et versions antérieures, try-with-resources n'est pas disponible. Dans ces versions , vous devez utiliser un finally -Block pour fermer explicitement une connexion:

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

JDBC 4.0 (Java 6) a introduit le concept de chargement automatique du pilote. Si vous utilisez Java 5 ou une version antérieure, ou un ancien pilote JDBC qui n'implémente pas le support JDBC 4, vous devrez charger explicitement le ou les pilotes:

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

Cette ligne doit se produire (au moins) une fois dans votre programme, avant toute connexion.

Même dans Java 6 et versions ultérieures avec un JDBC 4.0, il peut être nécessaire de charger explicitement un pilote: par exemple, dans les applications Web lorsque le pilote n'est pas chargé dans le conteneur, mais dans le cadre de l'application Web.

Vous pouvez également fournir un objet Properties pour vous connecter:

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
}

Ou même sans propriétés, par exemple si la base de données n'a pas besoin d'un nom d'utilisateur et d'un mot de passe:

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

Créer une connexion à MySQL

Pour vous connecter à MySQL, vous devez utiliser le pilote MySQL Connector / J. Vous pouvez le télécharger depuis http://dev.mysql.com/downloads/connector/j/ ou vous pouvez utiliser Maven:

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

L' URL de base de JDBC pour MySQL est la suivante:

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

Où:

Clé La description Exemple
<hostname> Nom d'hôte du serveur MySQL localhost
<port> Port du serveur MySQL (facultatif, par défaut: 3306) 3306
<database> Nom de la base de données foobar
<propertyName> Nom d'une propriété de connexion useCompression
<propertyValue> Valeur d'une propriété de connexion true

L'URL prise en charge est plus complexe que celle indiquée ci-dessus, mais cela suffit pour la plupart des besoins «normaux».

Pour vous connecter utiliser:

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

Pour les anciennes versions de Java / JDBC:

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();
}

Connexion à une base de données Microsoft Access avec UCanAccess

UCanAccess est un pilote Java JDBC pur qui nous permet de lire et d'écrire sur des bases de données Access sans utiliser ODBC . Il utilise deux autres packages, Jackcess et HSQLDB , pour effectuer ces tâches.

Une fois configuré * , nous pouvons travailler avec des données dans des fichiers .accdb et .mdb en utilisant le code suivant:

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));
}

* Pour plus de détails voir la question suivante:

Manipulation d'une base de données Access à partir de Java sans ODBC

Connexion JDBC Oracle

Chauffeur:

( Remarque: le chauffeur n'est pas inclus dans Maven Central!)

Initialisation de la classe de pilote:

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

URL de connexion

Format plus ancien, avec SID

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

Format plus récent, avec nom de service

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

Tnsnames comme entrée

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

Chaîne de connexion au cluster RAC pour le basculement

"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)))"

Exemple

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


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow