Waarschijnlijk de meest eenvoudige manier om de databasenaam van het JDBC Connection-object zelf te krijgen, is via de getCatalog()
methode:
Echter, zoals Konstantin in zijn opmerking hieronder aangaf, zal die waarde niet veranderen als de huidige MySQL-database wordt gewijzigd door een USE dbname
uit te geven. uitspraak.
getCatalog()
kan nog steeds nuttig zijn in een toepassing die
- verandert geen databases, of
- doet dingen "The JDBC Way" met behulp van
setCatalog()
om de huidige database te wijzigen,
maar voor MySQL, met SELECT DATABASE()
lijkt over het algemeen veiliger te zijn.
Merk ook op dat deze mogelijke discrepantie tussen getCatalog()
en de daadwerkelijke huidige database hangt af van het gedrag van het specifieke JDBC-stuurprogramma. Uit nieuwsgierigheid heb ik iets soortgelijks geprobeerd met de Microsoft JDBC Driver 4.0 voor SQL Server en .getCatalog()
was inderdaad op de hoogte van de wijziging in de huidige database onmiddellijk na het uitvoeren van een USE dbname
uitspraak. Dat wil zeggen, de 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);
}
leverde de volgende resultaten op:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master