Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Obtenha o nome do banco de dados mysql conectado (JDBC)


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