sql >> Databáze >  >> RDS >> Mysql

Získejte název připojené databáze mysql (JDBC)

Pravděpodobně nejpřímější způsob, jak získat název databáze ze samotného objektu připojení JDBC, je pomocí getCatalog() metoda:

Connection#getCatalog()

Jak však zdůraznil Konstantin ve svém komentáři níže, tato hodnota se nezmění, pokud se aktuální databáze MySQL změní vydáním USE dbname tvrzení.

getCatalog() může být stále užitečné v aplikaci, která

  • nemění databáze nebo
  • dělá věci "The JDBC Way" pomocí setCatalog() změnit aktuální databázi,

ale pro MySQL pomocí SELECT DATABASE() se zdá být celkově bezpečnější.

Všimněte si také, že tento potenciální nesoulad mezi getCatalog() a aktuální aktuální databáze závisí na chování konkrétního ovladače JDBC. Ze zvědavosti jsem zkusil něco podobného s Microsoft JDBC Driver 4.0 pro SQL Server a .getCatalog() skutečně věděl o změně aktuální databáze ihned po spuštění USE dbname tvrzení. Tedy kód

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);
}

přineslo následující výsledky:

getCatalog() returns: myDb
           Executing: USE master
getCatalog() returns: master


  1. Jak odladím chyby, které nemají žádné chybové hlášení?

  2. Nejrychlejší metoda pro SQL Server vkládá, aktualizuje, vybírá

  3. Oprava „SQL Server zablokoval přístup k STATEMENT ‚OpenRowset/OpenDatasource‘ komponenty ‚Ad Hoc Distributed Queries‘

  4. Co říká standard SQL o závorkách v příkazech SQL UNION/EXCEPT/INTERSECT?