Search code examples
jdbch2in-memory-databaseh2db

H2 show value of DB_CLOSE DELAY (set by SET DB_CLOSE_DELAY)


The H2 Database has a list of commands starting with SET, in particular SET DB_CLOSE_DELAY. I would like to find out what the value of DB_CLOSE_DELAY is. I am using JDBC. Setting is easy

cx.createStatement.execute("SET DB_CLOSE_DELAY 0")

but none of the following returns the actual value of DB_CLOSE_DELAY:

cx.createStatement.executeQuery("DB_CLOSE_DELAY")
cx.createStatement.executeQuery("VALUES(@DB_CLOSE_DELAY)")
cx.createStatement.executeQuery("GET DB_CLOSE_DELAY")
cx.createStatement.executeQuery("SHOW DB_CLOSE_DELAY")

Help would be greatly appreciated.


Solution

  • You can access this and other settings in the INFORMATION_SCHEMA.SETTINGS table - for example:

    String url = "jdbc:h2:mem:;DB_CLOSE_DELAY=3";
    Connection conn = DriverManager.getConnection(url, "sa", "the password goes here");
    Statement stmt = conn.createStatement();
            
    ResultSet rs = stmt.executeQuery("SELECT * FROM INFORMATION_SCHEMA.SETTINGS where name = 'DB_CLOSE_DELAY'");
    while (rs.next()) {
        System.out.println(rs.getString("name"));
        System.out.println(rs.getString("value"));
    }
    

    In this test, I use an unnamed in-memory database, and I explicitly set the delay to 3 seconds when I create the DB.

    The output from the print statements is:

    DB_CLOSE_DELAY
    3