Вероятно най-лесният начин да получите името на базата данни от самия обект JDBC Connection е чрез getCatalog()
метод:
Въпреки това, както Константин посочи в коментара си по-долу, тази стойност няма да се промени, ако текущата база данни MySQL бъде променена чрез издаване на USE dbname
изявление.
getCatalog()
все още може да бъде полезен в приложение, което
- не променя бази данни, или
- върши нещата "The JDBC Way", като използва
setCatalog()
за да промените текущата база данни,
но за MySQL, използвайки SELECT DATABASE()
като цяло изглежда по-безопасно.
Имайте предвид също, че това потенциално несъответствие между getCatalog()
и действителната текуща база данни зависи от поведението на конкретния JDBC драйвер. От любопитство опитах нещо подобно с Microsoft JDBC Driver 4.0 за SQL Server и .getCatalog()
наистина беше наясно с промяната в текущата база данни веднага след стартиране на USE dbname
изявление. Тоест кодът
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);
}
даде следните резултати:
getCatalog() returns: myDb
Executing: USE master
getCatalog() returns: master