Probablemente, la forma más sencilla de obtener el nombre de la base de datos del propio objeto de conexión JDBC es a través de getCatalog()
método:
Sin embargo, como señaló Konstantin en su comentario a continuación, ese valor no cambiará si la base de datos MySQL actual se cambia emitiendo un USE dbname
declaración.
getCatalog()
aún podría ser útil en una aplicación que
- no cambia las bases de datos, o
- hace las cosas "The JDBC Way" usando
setCatalog()
para cambiar la base de datos actual,
pero para MySQL, usando SELECT DATABASE()
parece ser más seguro en general.
Tenga en cuenta también que esta posible discrepancia entre getCatalog()
y la base de datos actual real depende del comportamiento del controlador JDBC en particular. Por curiosidad probé algo similar con Microsoft JDBC Driver 4.0 para SQL Server y .getCatalog()
De hecho, estaba al tanto del cambio en la base de datos actual inmediatamente después de ejecutar USE dbname
declaración. Es decir, el código
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);
}
produjo los siguientes resultados:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master