sql >> Databasteknik >  >> RDS >> Mysql

Hämta det anslutna mysql-databasnamnet (JDBC)

Det förmodligen enklaste sättet att få databasnamnet från själva JDBC Connection-objektet är via getCatalog() metod:

Connection#getCatalog()

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


  1. Saknar mysql.sock; ger OperationalError:(2002, Kan inte ansluta till lokal MySQL-server via sockeln '/tmp/mysql.sock' (2))

  2. MySQL57-tjänsten på lokal dator startade och stoppade sedan

  3. Mysql:Skapa inline-tabell inom select-satsen?

  4. Mysql unik begränsning som tillåter en rad för en kombination