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