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 :
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