Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Rufen Sie den Namen der verbundenen MySQL-Datenbank ab (JDBC)

Der wahrscheinlich einfachste Weg, den Datenbanknamen aus dem JDBC-Verbindungsobjekt selbst zu erhalten, ist über getCatalog() Methode:

Connection#getCatalog()

Wie Konstantin jedoch in seinem Kommentar unten betonte, ändert sich dieser Wert nicht, wenn die aktuelle MySQL-Datenbank durch Ausgabe eines USE dbname geändert wird Aussage.

getCatalog() könnte dennoch in einer Anwendung nützlich sein, die

  • ändert keine Datenbanken, oder
  • erledigt Dinge "auf JDBC-Weise", indem es setCatalog() verwendet um die aktuelle Datenbank zu ändern,

aber für MySQL mit SELECT DATABASE() scheint insgesamt sicherer zu sein.

Beachten Sie auch, dass diese potenzielle Diskrepanz zwischen getCatalog() und die tatsächliche aktuelle Datenbank hängt vom Verhalten des jeweiligen JDBC-Treibers ab. Aus Neugier habe ich etwas Ähnliches mit dem Microsoft JDBC-Treiber 4.0 für SQL Server und .getCatalog() versucht war sich der Änderung der aktuellen Datenbank tatsächlich unmittelbar nach dem Ausführen von USE dbname bewusst Aussage. Das heißt, der 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);
}

erzeugte die folgenden Ergebnisse:

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