Mysql
 sql >> Database >  >> RDS >> Mysql

Ottieni il nome del database mysql connesso (JDBC)

Probabilmente il modo più semplice per ottenere il nome del database dall'oggetto JDBC Connection stesso è tramite getCatalog() metodo:

Connection#getCatalog()

Tuttavia, come ha sottolineato Konstantin nel suo commento di seguito, quel valore non cambierà se l'attuale database MySQL viene modificato emettendo un USE dbname dichiarazione.

getCatalog() potrebbe essere comunque utile in un'applicazione che

  • non cambia i database, o
  • fa le cose "The JDBC Way" usando setCatalog() per modificare il database corrente,

ma per MySQL, usando SELECT DATABASE() sembra essere nel complesso più sicuro.

Nota anche che questa potenziale discrepanza tra getCatalog() e il database corrente effettivo dipende dal comportamento del particolare driver JDBC. Per curiosità ho provato qualcosa di simile con Microsoft JDBC Driver 4.0 per SQL Server e .getCatalog() era effettivamente a conoscenza della modifica al database corrente immediatamente dopo aver eseguito un USE dbname dichiarazione. Cioè, il codice

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);
}

ha prodotto i seguenti risultati:

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