Prawdopodobnie najprostszym sposobem uzyskania nazwy bazy danych z samego obiektu JDBC Connection jest użycie getCatalog() metoda:
Jednak, jak zauważył Konstantin w swoim komentarzu poniżej, ta wartość nie zmieni się, jeśli bieżąca baza danych MySQL zostanie zmieniona przez wydanie USE dbname oświadczenie.
getCatalog() może być nadal przydatny w aplikacji, która
- nie zmienia baz danych lub
- robi rzeczy „The JDBC Way” za pomocą
setCatalog()zmienić bieżącą bazę danych,
ale dla MySQL, używając SELECT DATABASE() wydaje się być ogólnie bezpieczniejszy.
Zauważ również, że ta potencjalna rozbieżność między getCatalog() a rzeczywista bieżąca baza danych zależy od zachowania konkretnego sterownika JDBC. Z ciekawości spróbowałem czegoś podobnego z Microsoft JDBC Driver 4.0 dla SQL Server i .getCatalog() rzeczywiście wiedział o zmianie w bieżącej bazie danych natychmiast po uruchomieniu USE dbname oświadczenie. czyli kod
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);
}
dał następujące wyniki:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master