Probabilmente il modo più semplice per ottenere il nome del database dall'oggetto JDBC Connection stesso è tramite getCatalog()
metodo:
Tuttavia, come ha sottolineato Konstantin nel suo commento di seguito, quel valore non cambierà se l'attuale database MySQL viene modificato emettendo un USE dbname
dichiarazione.
getCatalog()
potrebbe essere comunque utile in un'applicazione che
- non cambia i database, o
- fa le cose "The JDBC Way" usando
setCatalog()
per modificare il database corrente,
ma per MySQL, usando SELECT DATABASE()
sembra essere nel complesso più sicuro.
Nota anche che questa potenziale discrepanza tra getCatalog()
e il database corrente effettivo dipende dal comportamento del particolare driver JDBC. Per curiosità ho provato qualcosa di simile con Microsoft JDBC Driver 4.0 per SQL Server e .getCatalog()
era effettivamente a conoscenza della modifica al database corrente immediatamente dopo aver eseguito un USE dbname
dichiarazione. Cioè, il codice
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);
}
ha prodotto i seguenti risultati:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master