Pravděpodobně nejpřímější způsob, jak získat název databáze ze samotného objektu připojení JDBC, je pomocí getCatalog()
metoda:
Jak však zdůraznil Konstantin ve svém komentáři níže, tato hodnota se nezmění, pokud se aktuální databáze MySQL změní vydáním USE dbname
tvrzení.
getCatalog()
může být stále užitečné v aplikaci, která
- nemění databáze nebo
- dělá věci "The JDBC Way" pomocí
setCatalog()
změnit aktuální databázi,
ale pro MySQL pomocí SELECT DATABASE()
se zdá být celkově bezpečnější.
Všimněte si také, že tento potenciální nesoulad mezi getCatalog()
a aktuální aktuální databáze závisí na chování konkrétního ovladače JDBC. Ze zvědavosti jsem zkusil něco podobného s Microsoft JDBC Driver 4.0 pro SQL Server a .getCatalog()
skutečně věděl o změně aktuální databáze ihned po spuštění USE dbname
tvrzení. Tedy kód
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);
}
přineslo následující výsledky:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master