Sandsynligvis den mest ligetil måde at få databasenavnet fra selve JDBC Connection-objektet på er via getCatalog()
metode:
Men som Konstantin påpegede i sin kommentar nedenfor, ændres denne værdi ikke, hvis den nuværende MySQL-database ændres ved at udstede et USE dbname
udmelding.
getCatalog()
kan stadig være nyttig i et program, der
- ændrer ikke databaser, eller
- gør tingene "The JDBC Way" ved at bruge
setCatalog()
for at ændre den aktuelle database,
men for MySQL ved hjælp af SELECT DATABASE()
ser ud til at være mere sikker generelt.
Bemærk også, at denne potentielle uoverensstemmelse mellem getCatalog()
og den aktuelle aktuelle database afhænger af den særlige JDBC-drivers opførsel. Af nysgerrighed prøvede jeg noget lignende med Microsoft JDBC Driver 4.0 til SQL Server og .getCatalog()
var faktisk klar over ændringen til den aktuelle database umiddelbart efter at have kørt en USE dbname
udmelding. Det vil sige koden
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);
}
gav følgende resultater:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master