Provavelmente, a maneira mais direta de obter o nome do banco de dados do próprio objeto JDBC Connection é através do
getCatalog()
método:Connection#getCatalog()
No entanto, como Konstantin apontou em seu comentário abaixo, esse valor não será alterado se o banco de dados MySQL atual for alterado emitindo um
USE dbname
declaração. getCatalog()
ainda pode ser útil em um aplicativo que - não altera bancos de dados ou
- faz as coisas "à maneira JDBC" usando
setCatalog()
para alterar o banco de dados atual,
mas para MySQL, usando
SELECT DATABASE()
parece ser mais seguro em geral. Observe também que essa possível discrepância entre
getCatalog()
e o banco de dados atual real depende do comportamento do driver JDBC específico. Por curiosidade, tentei algo semelhante com o Microsoft JDBC Driver 4.0 para SQL Server e .getCatalog()
estava realmente ciente da mudança no banco de dados atual imediatamente após executar um USE dbname
declaração. Ou seja, o 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);
}
produziu os seguintes resultados:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master