H2: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
 
(5 intermediate revisions by the same user not shown)
Line 5: Line 5:
=Internal=
=Internal=


* [[Databases#Databases|Databases]]
* [[Relational_Databases#Overview|Relational Databases]]
* [[Spring H2 Support]]
* [[Spring H2 Support]]


Line 24: Line 24:
Embedded:  
Embedded:  
  jdbc:h2:!(tcp://)[file:]{path}[;<;,user={user:param},password={password:param},{:identifier}={:param}>]
  jdbc:h2:!(tcp://)[file:]{path}[;<;,user={user:param},password={password:param},{:identifier}={:param}>]
<font color=darkgray>
This works for unit tests:
spring.datasource.url=jdbc:h2:mem:MOCKDRIVER_TEST_H2;DB_CLOSE_DELAY=-1
while this one does not:
spring.datasource.url=jjdbc:h2:tcp://localhost/mem:MOCKDRIVER_TEST_H2;DB_CLOSE_DELAY=-1
Figure out the difference.
</font>


=Installation=
=Installation=
Line 32: Line 41:
  ln -s ./h2-2017-06-10 h2
  ln -s ./h2-2017-06-10 h2


=Accessing an H2 Instance Embedded in a Different JVM=
=Accessing an H2 Instance Embedded within a Different JVM=


By default, the H2 instance is only accessible from the same address space. However, it can be made accessible remotely, over the network, if a org.h2.tools.Server is started in the same JVM:  
By default, the H2 instance is only accessible from the same address space. However, it can be made accessible remotely, over the network, if a org.h2.tools.Server is started in the same JVM:  
Line 39: Line 48:
org.h2.tools.Server server = org.h2.tools.Server.createTcpServer().start();
org.h2.tools.Server server = org.h2.tools.Server.createTcpServer().start();
</syntaxhighlight>
</syntaxhighlight>
Note that for the types to be accessible,  you need to declare the H2 dependency as "implementation" instead of "runtimeOnly".


Once the H2 TCP server is up and running, the instance can be accessed at:
Once the H2 TCP server is up and running, the instance can be accessed at:
Line 45: Line 56:


The "DB_CLOSE_DELAY=-1" is important, because by default, closing the last connection to a database closes the database. For an in-memory database, this means the content is lost. To keep the database open, add ;DB_CLOSE_DELAY=-1 to the database URL.
The "DB_CLOSE_DELAY=-1" is important, because by default, closing the last connection to a database closes the database. For an in-memory database, this means the content is lost. To keep the database open, add ;DB_CLOSE_DELAY=-1 to the database URL.
If challenged for user/password, use "sa" and an empty password.


=Operations=
=Operations=

Latest revision as of 22:02, 7 November 2021

External

Internal

Overview

Concepts

H2 URLs

Remote:

jdbc:h2:tcp://{host::localhost}[:{port::9092}]/{database::default}[;<;,user={user:param},password={password:param},{:identifier}={:param}>]

In-memory:

jdbc:h2:mem:{database::default}?[;<;,{:identifier}={:param}>]

Embedded:

jdbc:h2:!(tcp://)[file:]{path}[;<;,user={user:param},password={password:param},{:identifier}={:param}>]

This works for unit tests:

spring.datasource.url=jdbc:h2:mem:MOCKDRIVER_TEST_H2;DB_CLOSE_DELAY=-1

while this one does not:

spring.datasource.url=jjdbc:h2:tcp://localhost/mem:MOCKDRIVER_TEST_H2;DB_CLOSE_DELAY=-1

Figure out the difference.

Installation

cd $RUNTIME_DIR
unzip .../h2-2017-06-10.zip
mv h2 h2-2017-06-10
ln -s ./h2-2017-06-10 h2

Accessing an H2 Instance Embedded within a Different JVM

By default, the H2 instance is only accessible from the same address space. However, it can be made accessible remotely, over the network, if a org.h2.tools.Server is started in the same JVM:

org.h2.tools.Server server = org.h2.tools.Server.createTcpServer().start();

Note that for the types to be accessible, you need to declare the H2 dependency as "implementation" instead of "runtimeOnly".

Once the H2 TCP server is up and running, the instance can be accessed at:

jdbc:h2:tcp://localhost/mem:default;DB_CLOSE_DELAY=-1

The "DB_CLOSE_DELAY=-1" is important, because by default, closing the last connection to a database closes the database. For an in-memory database, this means the content is lost. To keep the database open, add ;DB_CLOSE_DELAY=-1 to the database URL.

If challenged for user/password, use "sa" and an empty password.

Operations

Run Database and H2 Console

cd $RUNTIME_DIR/h2/bin
./h2.sh

This will start a "test" database and make H2 console available on port 8082: http://localhost:8082

The "test" database will be available as "jdbc:h2:tcp://localhost/~/test", authenticating with a "sa" user and an empty password ("").

H2 DDL Operations

H2 DDL Operations

H2 DML Operations

H2 DML Operations