Det förmodligen enklaste sättet att få databasnamnet från själva JDBC Connection-objektet är via getCatalog()
metod:
Men som Konstantin påpekade i sin kommentar nedan, kommer det värdet inte att ändras om den nuvarande MySQL-databasen ändras genom att utfärda ett USE dbname
påstående.
getCatalog()
kan fortfarande vara användbar i ett program som
- ändrar inte databaser, eller
- gör saker "The JDBC Way" genom att använda
setCatalog()
för att ändra den aktuella databasen,
men för MySQL, med SELECT DATABASE()
verkar vara säkrare överlag.
Observera också att denna potentiella avvikelse mellan getCatalog()
och den faktiska aktuella databasen beror på beteendet hos den specifika JDBC-drivrutinen. Av nyfikenhet provade jag något liknande med Microsoft JDBC Driver 4.0 för SQL Server och .getCatalog()
var verkligen medveten om ändringen av den aktuella databasen omedelbart efter att ha kört en USE dbname
påstående. Det vill säga 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öljande resultat:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master