sql >> Database teknologi >  >> RDS >> Mysql

Hent det tilsluttede mysql-databasenavn (JDBC)

Sandsynligvis den mest ligetil måde at få databasenavnet fra selve JDBC Connection-objektet på er via getCatalog() metode:

Connection#getCatalog()

Men som Konstantin påpegede i sin kommentar nedenfor, ændres denne værdi ikke, hvis den nuværende MySQL-database ændres ved at udstede et USE dbname udmelding.

getCatalog() kan stadig være nyttig i et program, der

  • ændrer ikke databaser, eller
  • gør tingene "The JDBC Way" ved at bruge setCatalog() for at ændre den aktuelle database,

men for MySQL ved hjælp af SELECT DATABASE() ser ud til at være mere sikker generelt.

Bemærk også, at denne potentielle uoverensstemmelse mellem getCatalog() og den aktuelle aktuelle database afhænger af den særlige JDBC-drivers opførsel. Af nysgerrighed prøvede jeg noget lignende med Microsoft JDBC Driver 4.0 til SQL Server og .getCatalog() var faktisk klar over ændringen til den aktuelle database umiddelbart efter at have kørt en USE dbname udmelding. Det vil sige 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ølgende resultater:

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


  1. Henter linket liste i MySQL-database

  2. At ramme 2100 parametergrænsen (SQL-server), når du bruger Contains()

  3. MYSQL if erklæring spørgsmål

  4. PostgreSQL-implementering og konfiguration med Puppet