# H2 Database Engine Cheat Sheet

## Using H2

- H2 is open source, free to use and distribute.
- Download: jar, installer (Windows), zip.
- To start the H2 Console tool, double click the jar file, or run `java -jar h2*.jar`, `h2.bat`, or `h2.sh`.
- A new database is automatically created by default.
- Closing the last connection closes the database.

## Documentation

Reference: SQL grammar, functions, data types, tools, API
Features: fulltext search, encryption, read-only (zip/jar), CSV, auto-reconnect, triggers, user functions

## Database URLs

Embedded
`jdbc:h2:~/test` 'test' in the user home directory
`jdbc:h2:/data/test` 'test' in the directory /data
`jdbc:h2:test` in the current(!) working directory

In-Memory
`jdbc:h2:mem:test` multiple connections in one process
`jdbc:h2:mem:` unnamed private; one connection

Server Mode
`jdbc:h2:tcp://localhost/~/test` user home dir
`jdbc:h2:tcp://localhost//data/test` absolute dir
Server start:`java -cp *.jar org.h2.tools.Server`

Settings
`jdbc:h2:..;MODE=MySQL` compatibility (or HSQLDB,...)
`jdbc:h2:..;TRACE_LEVEL_FILE=3` log to *.trace.db

## Using the JDBC API

    Class.forName("org.h2.Driver");
    Connection conn = DriverManager.
        getConnection("jdbc:h2:~/test");
    conn.close();

## Connection Pool

    import org.h2.jdbcx.JdbcConnectionPool;
    JdbcConnectionPool cp = JdbcConnectionPool.
        create("jdbc:h2:~/test", "sa", "sa");
    Connection conn = cp.getConnection();
    conn.close(); cp.dispose();

## Maven 2

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>${version}</version>
    </dependency>

## Hibernate

hibernate.cfg.xml (or use the HSQLDialect):

    <property name="dialect">
        org.hibernate.dialect.H2Dialect
    </property>

## TopLink and Glassfish

Datasource class: `org.h2.jdbcx.JdbcDataSource`
`oracle.toplink.essentials.platform.`
`database.H2Platform`