Mysql
 sql >> Base de données >  >> RDS >> Mysql

Obtenir le nom de la base de données mysql connectée (JDBC)

Le moyen le plus simple d'obtenir le nom de la base de données à partir de l'objet de connexion JDBC lui-même est probablement via le getCatalog() méthode :

Connexion#getCatalog()

Cependant, comme Konstantin l'a souligné dans son commentaire ci-dessous, cette valeur ne changera pas si la base de données MySQL actuelle est modifiée en émettant un USE dbname déclaration.

getCatalog() peut toujours être utile dans une application qui

  • ne modifie pas les bases de données, ou
  • fait les choses "à la manière JDBC" en utilisant setCatalog() pour changer la base de données courante,

mais pour MySQL, en utilisant SELECT DATABASE() semble globalement plus sûr.

Notez également que cette divergence potentielle entre getCatalog() et la base de données actuelle réelle dépend du comportement du pilote JDBC particulier. Par curiosité, j'ai essayé quelque chose de similaire avec le pilote Microsoft JDBC 4.0 pour SQL Server et .getCatalog() était en effet au courant de la modification de la base de données actuelle immédiatement après avoir exécuté un USE dbname déclaration. Autrement dit, le code

String connectionUrl = "jdbc:sqlserver://localhost:52865;"
        + "databaseName=myDb;" + "integratedSecurity=true";
try (Connection con = DriverManager.getConnection(connectionUrl)) {
    System.out.println(String.format(
            "getCatalog() returns: %s", 
            con.getCatalog()));
    try (Statement s = con.createStatement()) {
        System.out.println("           Executing: USE master");
        s.execute("USE master");
    }
    System.out.println(String.format(
            "getCatalog() returns: %s", 
            con.getCatalog()));
} catch (Exception e) {
    e.printStackTrace(System.out);
}

produit les résultats suivants :

getCatalog() returns: myDb
           Executing: USE master
getCatalog() returns: master